it-swarm.com.de

Oracle SQL-Abfrage für Datumsformat

Ich werde immer mit dem Datumsformat in Oracle SQL-Abfragen verwechselt und verbringe einige Minuten mit Google. Kann mir jemand erklären, wie ich es am einfachsten angehen kann, wenn wir in der Datenbanktabelle ein anderes Datumsformat haben?

beispielsweise habe ich eine Datumsspalte als ES_DATE, enthält Daten als 27-APR-12 11.52.48.294030000 AM vom Datentyp TIMESTAMP (6) WITH LOCAL TIME ZONE.

enter image description here

Ich habe eine einfache Auswahlabfrage geschrieben, um Daten für diesen bestimmten Tag abzurufen, und es wird nichts zurückgegeben. Kann mir jemand erklären?

select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')

oder

select * from table where es_date = '27-APR-12';
20
user2246725

to_date() gibt ein Datum um 00:00:00 zurück, daher müssen Sie die Minuten von dem Datum "entfernen", mit dem Sie vergleichen:

select * 
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')

Sie möchten wahrscheinlich einen Index für trunc(es_date) erstellen, wenn Sie dies regelmäßig tun.

Das Literal '27-APR-12' Kann sehr leicht fehlschlagen, wenn das Standarddatum in ein anderes Format geändert wird. Stellen Sie also sicher, dass Sie to_date() immer mit einer geeigneten Formatmaske (oder einem ANSI-Literal: date '2012-04-27') Verwenden.

Obwohl Sie die Verwendung von to_date() richtig durchgeführt haben und sich nicht auf die implizite Datentypkonvertierung verlassen haben, weist Ihre Verwendung von to_date () aufgrund des Formats 'dd-MON-yy' Immer noch eine subtile Gefahr auf.

Bei einer anderen Spracheinstellung kann dies leicht fehlschlagen, z. TO_DATE('27-MAY-12','dd-MON-yy') wenn NLS_LANG auf deutsch gesetzt ist. Vermeiden Sie alles in dem Format, das in einer anderen Sprache unterschiedlich sein kann. Unter Verwendung einer vierstelligen Jahreszahl und nur von Zahlen, z.B. 'dd-mm-yyyy' Oder 'yyyy-mm-dd'

42

wenn Sie dasselbe Datumsformat verwenden und in Oracle die Abfrage des Datums auswählen:

   select count(id) from Table_name where TO_DATE(Column_date)='07-OCT-2015';

Von Oracle bereitgestelltes To_DATE

2