Hi Ilja,
wieso ist BETWEEN ein falscher Operator für Datumswerte? Das wäre mir sehr neu.
Welche falschen Aussagen bekomme ich denn? Ich habe mir gerade die Zeit genommen, das Szenario mal nachzustellen. BETWEEN funktioniert für Datumswerte wunderbar und die Abfragesemantik deckt genau das Problem ab. Du stellst die Frage einfach nur aus der Gegenrichtung.
create table datumsTest
(
Id int Identity(1,1) PRIMARY KEY,
Anreise datetime NOT NULL,
Abreise datetime NOT NULL
)
INSERT datumsTest (Anreise, Abreise) VALUES ('2006-01-14', '2006-01-18')
INSERT datumsTest (Anreise, Abreise) VALUES ('2006-02-21', '2006-02-23')
DECLARE @planAnreise datetime
DECLARE @planAbreise datetime
SET @planAnreise = '2006-01-19'
SET @planAbreise = '2006-02-12'
-- meins
SELECT 'noch frei', Id FROM datumsTest
WHERE (@planAnreise NOT BETWEEN Anreise AND Abreise)
AND (@planAbreise NOT BETWEEN Anreise AND Abreise)
-- deins
SELECT 'schonGebucht', Id FROM datumsTest
WHERE (@planAnreise <= Abreise)
AND (@planAbreise >= Anreise)
Die Ausführungspläne unterscheiden sich etwas, was je nach DBMS marginale Performance-Verbesserungen bringen könnte.
Was sagst du?
Ciao, Frank