Wie vergleicht man in SQL Datumswerte?

Mit MySQL-Syntax und einer Tabelle mit einer Zeile wie:

mydate DATETIME NULL,

Gibt es eine Möglichkeit, so etwas wie zu tun:

... WHERE mydate<='2008-11-25';

Ich versuche es, aber nicht wirklich zu bekommen, um es zu funktionieren.

Antwort auf "Wie vergleicht man in SQL Datumswerte? " 5 von antworten

Nevermind fand eine Antwort. Ty das gleiche für jeden, der bereit war zu antworten.

WHERE DATEDIFF(mydata,'2008-11-20') >=0;

Uh, WHERE mydate<='2008-11-25' ist der Weg, es zu tun. Das sollte funktionieren.

Erhalten Sie eine Fehlermeldung? Verwenden Sie eine alte Version von MySQL?

Bearbeiten: Folgendes funktioniert für mich auf MySQL 5.x

create temporary table foo(d datetime);
insert into foo(d) VALUES ('2000-01-01');
insert into foo(d) VALUES ('2001-01-01');
select * from foo where d <= '2000-06-01';

In der Standard-SQL-Syntax würden Sie verwenden:

WHERE mydate <= DATE '2008-11-20'

Das heißt, das Schlüsselwort DATE sollte der Zeichenfolge vorangehen. In einigen DBMS müssen Sie jedoch nicht so explizit sein. Das System konvertiert die DATE-Spalte automatisch in eine Zeichenfolge oder die Zeichenfolge in einen DATE-Wert. Es gibt nominell einige interessante Implikationen, wenn das DATE in eine Zeichenfolge umgewandelt wird - wenn Sie zufällig Daten im ersten Jahrtausend haben (0001-01-01 .. 0999-12-31) und die führende Null(es) vom Formatierungssystem weggelassen wird.

Sie könnten die Zeitkomponente

WHERE mydate<='2008-11-25 23:59:59'

hinzufügen, aber das könnte bei DST-Umschaltdatum fehlschlagen, wenn mydate '2008-11-25 24:59:59' ist, also ist es wahrscheinlich am sichersten, alles vor dem nächsten Date zu greifen:

WHERE mydate < '2008-11-26 00:00:00'

Ihr Problem kann sein, dass Sie es mit DATETIME-Daten zu tun haben, nicht nur mit Daten. Wenn eine Zeile ein mydate hat, das '2008-11-25 09:30 AM' ist, dann ihr WHERE mydate<='2008-11-25'; wird diese Zeile nicht zurückgeben. '2008-11-25' hat eine implizite Zeit von 00:00 (Mitternacht), also obwohl der Datumsteil gleich ist, sind sie nicht gleich, und mydate ist größer.

Wenn Sie < '2008-11-26' anstelle von <= '2008-11-25' verwenden, würde das funktionieren. Die Datediff-Methode funktioniert, da sie nur den Datumsteil vergleicht und die Zeiten ignoriert.