23 Stimmen

SQL-Abfrage NICHT zwischen zwei Daten

Ich brauche Hilfe bei der SQL-Abfrage.

Ich versuche alle Datensätze aus der Tabelle test_table auszuwählen, die nicht zwischen den beiden Daten '2009-12-15' und '2010-01-02' passen.

Das ist meine Tabellenstruktur:

`start_date` date NOT NULL default '0000-00-00',
`end_date` date NOT NULL default '0000-00-00'

-----------------------------
 **Der folgende Datensatz sollte nicht ausgewählt werden:**

`start_date`, `end_date`
'2003-06-04', '2010-01-01'

Meine Abfrage:

SELECT * 

FROM `test_table` 
WHERE 

CAST('2009-12-15' AS DATE) NOT BETWEEN start_date and end_date 
AND 
CAST('2010-01-02' AS DATE) NOT BETWEEN start_date and end_date

Irgendwelche Ideen, warum meine Abfrage falsche Datensätze auswählt? Sollte ich die Reihenfolge der Werte in der Abfrage ändern, beispielsweise zu:

start_date NOT BETWEEN CAST('2009-12-15' AS DATE) and CAST('2010-01-02' AS DATE)

Vielen Dank für jede Hilfe

0 Stimmen

Wenn Sie NICHT vor start_date setzen, sollte es funktionieren.

0voto

yu_sha Punkte 4110

Angenommen, dass start_date vor end_date liegt,

Das Intervall [start_date..end_date] NICHT ZWISCHEN zwei Daten bedeutet einfach, dass es entweder vor dem 15. Dezember 2009 beginnt oder nach dem 2. Januar 2010 endet.

Dann kannst du einfach machen

start_dateCAST('2010-01-02' AS DATE)

0voto

Jim Garrison Punkte 83143

Um eine Überlappung zu haben, muss das Startdatum der Tabelle KLEINER ALS das Enddatum des Intervalls sein (d. h. es muss vor dem Ende des Intervalls beginnen) UND das Enddatum der Tabelle muss GRÖSSER SEIN ALS das Startdatum des Intervalls. Je nach Ihren Anforderungen müssen Sie möglicherweise <= und >= verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X