web-dev-qa-db-de.com

Wählen Sie aus der Tabelle, indem Sie nur das Datum ohne Uhrzeit kennen (Oracle).

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?

44
Abdulrhman

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));
84
Peter Lang

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'

3
user648026

Ich persönlich gehe normalerweise mit:

select * 
from   t1
where  date between trunc( :somedate )          -- 00:00:00
            and     trunc( :somedate ) + .99999 -- 23:59:59
3
R. Genaro

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

2
Dustin Laine

Versuchen Sie den folgenden Weg.

Select * from t1 where date(col_name)="8/3/2010" 
0
kiruthika

trunc(my_date,'DD') gibt Ihnen nur das Datum und nicht die Uhrzeit in Oracle an.

0
Dave Kuziara