Erstens haben Daten in MySQL normalerweise das folgende Format, wenn sie implizit konvertiert werden - 2015-01-16
- statt 20150116
. Ich denke, Sie können Folgendes sowohl in MySQL als auch tun Oracle (es ist Standard-SQL) - Ich habe es in Oracle (10g) überprüft und es funktioniert, und es scheint zu funktionieren in meinem Gefummel mit MySQL
:
SELECT * FROM mytable
WHERE mydate IN ( DATE '2015-01-16', DATE '2015-01-18' );
Das in DATE zu konvertierende Zeichenfolgenliteral muss die Form yyyy-mm-dd
haben . Das funktioniert jetzt, wenn Ihre Daten Daten sind und haben keinen Zeitanteil. Wenn Ihre Datumsangaben nun einen Zeitanteil haben, werden die Dinge schwieriger, da MySQL das DATE()
verwendet Funktion, um den Datumsteil zu erhalten, während Oracle TRUNC()
verwenden würde . Aber Sie können das umgehen, indem Sie >=
vernünftig verwenden und <
, z. B.:
SELECT * FROM mytable
WHERE ( mydate >= DATE '2015-01-16' AND mydate < DATE '2015-01-17' )
OR ( mydate >= DATE '2015-01-18' AND mydate < DATE '2015-01-19' );
Wenn Sie nun SYSDATE
verwenden möchten verwenden Sie am besten den ANSI-Standard CURRENT_DATE
oder CURRENT_TIMESTAMP
. Diese können ohne Formatierung direkt verglichen werden und sollten sowohl in MySQL als auch in Oracle funktionieren. Sie können auch Datumsarithmetik mit INTERVAL
durchführen , in diesem Fall könnten Sie Folgendes versuchen:
SELECT * FROM mytable
WHERE mydate > CURRENT_DATE - INTERVAL '1' DAY;
AKTUALISIEREN Ich habe mir darüber Gedanken gemacht. Die unmittelbar obige Abfrage funktioniert nicht wirklich, wenn Sie alle Zeilen abrufen möchten, die heute eingegeben wurden . Die Schwierigkeit besteht darin, dass Oracle ANSI-Datumsliterale als Datumsangaben erkennt (d. h. ohne Zeitanteil), aber meines Wissens gibt es keine ANSI-Standardmethode zum Konvertieren von Datum/Uhrzeit Wert (der ein Oracle DATE
ist) zu einem Datum . Allerdings unterstützen sowohl Oracle als auch MySQL die EXTRACT()-Funktion, also sollten Sie Folgendes tun können, um heute zu erhalten Aufzeichnungen von :
SELECT * FROM mytable
WHERE EXTRACT(YEAR FROM mydate) = EXTRACT(YEAR FROM CURRENT_DATE)
AND EXTRACT(MONTH FROM mydate) = EXTRACT(MONTH FROM CURRENT_DATE)
AND EXTRACT(DAY FROM mydate) = EXTRACT(DAY FROM CURRENT_DATE);
Definitiv unhandlich, besonders wenn man mehr als ein Datum berücksichtigen muss (was ich annehme, da Sie den IN
verwenden Operator), sollte aber auf beiden Plattformen funktionieren. Siehe SQL Fiddle Demo hier (MySQL)
und hier (Oracle)
.