Ich versuche, Datensätze aus der Tabelle abzurufen, indem ich weiß, dass das Datum in der Spalte Datum und Uhrzeit enthält.
Angenommen, ich habe eine Tabelle namens t1
, die nur zwei Spalten name
und date
enthält.
Die in der Spalte gespeicherten Daten sind wie folgt 8/3/2010 12:34:20 PM
.
Ich möchte diesen Datensatz beispielsweise mit dieser Abfrage abrufen (beachten Sie, dass ich die Zeit nicht setze):
Select * From t1 Where date="8/3/2010"
Diese Abfrage gib mir nichts!
Wie kann ich date
abrufen, indem ich nur date
ohne Zeitangabe kenne?
DATE
ist ein reserviertes Schlüsselwort in Oracle, daher verwende ich stattdessen den Spaltennamen your_date
.
Wenn Sie einen Index für your_date
haben, würde ich verwenden
WHERE your_date >= TO_DATE('2010-08-03', 'YYYY-MM-DD')
AND your_date < TO_DATE('2010-08-04', 'YYYY-MM-DD')
oder BETWEEN
:
WHERE your_date BETWEEN TO_DATE('2010-08-03', 'YYYY-MM-DD')
AND TO_DATE('2010-08-03 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
Wenn kein Index vorhanden ist oder nicht zu viele Datensätze vorhanden sind
WHERE TRUNC(your_date) = TO_DATE('2010-08-03', 'YYYY-MM-DD')
sollte ausreichen. TRUNC
ohne Parameter entfernt Stunden, Minuten und Sekunden aus einer DATE
.
Wenn die Leistung wirklich wichtig ist, ziehen Sie in die Spalte einen Function Based Index
:
CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date));
Konvertieren Sie Ihre Datumsspalte in das richtige Format und vergleichen Sie:
SELECT * From my_table WHERE to_char(my_table.my_date_col,'MM/dd/yyyy') = '8/3/2010'
Dieser Teil
to_char(my_table.my_date_col,'MM/dd/yyyy')
Ergibt eine Zeichenfolge '8/3/2010'
Ich persönlich gehe normalerweise mit:
select *
from t1
where date between trunc( :somedate ) -- 00:00:00
and trunc( :somedate ) + .99999 -- 23:59:59
Sie können die between-Funktion verwenden, um alle Datensätze zwischen 2010-08-03 00: 00: 00: 000 UND 2010-08-03 23: 59: 59: 000 abzurufen
Versuchen Sie den folgenden Weg.
Select * from t1 where date(col_name)="8/3/2010"
trunc(my_date,'DD')
gibt Ihnen nur das Datum und nicht die Uhrzeit in Oracle an.