Frank (no reg): MySQL Abfrage mit Datum

Beitrag lesen

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