![]() |
Re: Überschneidung von Datumsbereichen finden?
Zitat:
SQL-Code:
where (
(BuchungStart between NeueBuchungStart and NeueBuchungEnd) or (NeueBuchungStart between BuchungStart and BuchungEnd) ) |
Re: Überschneidung von Datumsbereichen finden?
Hallo alcaeus!
Leider nicht. :) Überleg mal: Wie willst Du ein Zimmer von Mittwoch bis Donnerstag buchen, das aber von Dienstag bis Freitag schon gebucht ist? Viele Grüße Markus :gruebel: |
Re: Überschneidung von Datumsbereichen finden?
Na dann ist ja NeueBuchungStart zwischen BuchungStart und BuchungEnd,oder?
Hier ne Skizze:
Code:
Ich hoffe das hilft, das Schema zu erklären...
---------------
| NeueBuchung | --------------- ------------- | Buchung | ------------- Hier ist BuchungStart zwischen NeueBuchungStart und NeueBuchungEnd => erkannt --------------- | Buchung | --------------- --------------- | NeueBuchung | --------------- Hier ist NeueBuchungStart zwischen BuchungStart und BuchungEnd => erkannt --------------- | Buchung | --------------- ------------------- | NeueBuchung | ------------------- Hier ist BuchungStart zwischen NeueBuchungStart und NeueBuchungEnd => erkannt --------------- | NeueBuchung | --------------- ------------------- | Buchung | ------------------- Hier ist NeueBuchungStart zwischen BuchungStart und BuchungEnd => erkannt |
Re: Überschneidung von Datumsbereichen finden?
Wir hatten hier schon einmal fast die gleiche Diskussion. Ich vertrat erst Marskus' Meinnug, musste aber doch einsehen, dass TreffNix Recht hatte.
Seine Lösung sah IMHO so aus (auf jeden Fall wird das Statement funktionieren ;) ):
SQL-Code:
SELECT *
FROM DeineTabelle t WHERE t.StartDTM <= :i_EndDTM And t.EndDTM >= :i_StartDTM |
Re: Überschneidung von Datumsbereichen finden?
Datumsbereiche sind echt die Hölle - besonders, wenn sich mehrere Tabellen gegenseitig beeinflußen, Ende-Daten auch leer (NULL) sein können (= bis auf weiteres gültig) und man sicherstellen muß, dass zu einem gegebenen Zeitpunkt genau eine priorisierte Zuordnung vorhanden ist (z.B. Kunde mit mehreren Bankverbindungen - genau eine wird für Einzug genutzt, die anderen sind dann inaktiv - nun kommt eine Neue Bankverbindung hinzu und die soll in einem in der Zukunft liegenden Zeitabschnitt prisorisiert werden, danach soll aber wieder die alte Bankverbindung benutzt werden, ohne dass... :kotz: )
Habe mir eine Funktion gebastelt, die mir da etwas hülft (MSSQL): (*AusNähkästchenKram*)
SQL-Code:
Gruß
-- liefert 1 zurück, wenn A irgendwie B überlappt, sonst 0
CREATE FUNCTION dbo.fx_A_Hits_B ( @AStart datetime , @AStop datetime , @BStart datetime , @BStop datetime) RETURNS bit AS BEGIN DECLARE @EndOfTime datetime , @BeginOfTime datetime SET @EndOfTime = 2958463 -- = 31.12.9999 SET @BeginOfTime = -53690 -- = 01.01.1753 RETURN (CASE WHEN @AStart < coalesce(@BStop,@EndOfTime) AND coalesce(@AStop,@EndOfTime) > coalesce(@BStart,@BeginOfTime) THEN 1 ELSE 0 END) END PS: Achso - ich habe in meiner DB alles auf 0:00:00.000 Uhr (Start) bzw. 23:59:59.997 (Stop) gesetzt - daher kein <= und >= sondern nur < und > |
Re: Überschneidung von Datumsbereichen finden?
Hi!
@ alcaeus Du hast den Spaltennamen und den Prüfwert vertauscht und das ist nicht zulässig. Laut ![]()
SQL-Code:
@ Robert :thuimb:
SELECT column_name FROM table_name
WHERE column_name BETWEEN value1 AND value2 Viele Grüße Markus :gruebel: |
Re: Überschneidung von Datumsbereichen finden?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz