2016-12-11 5 views
1

Ich verwende Oracle XE auf meinem Rechner.
definiert eine Tabelle als:Oracle-Datumsvergleich mit to_date funktioniert nicht

Name  Type 
ENAME  VARCHAR2(20) 
DOJ  DATE 

eine einfache Auswahl Firing:

select * from test1.tasty1;

ENAME    DOJ 
sat     08-DEC-16 

So ok - ich bin mir bewusst, dass DATE Feld Zeitkomponente in sich hat.
Die folgende Abfrage TRUNC mit adaequat:

select * from test1.tasty1 wo trunc (DOJ) = '08 dec-16' ;

Jetzt wollte ich die "to_date" -Funktion testen - aber keine der unten stehenden Abfragen funktionierte - warum?

select * from test1.tasty1 wo DOJ = to_date ('08 -12-2016' , 'DD-MM-YYYY');
Wählen * aus test1.tasty1 wobei DOJ = to_date ('08 -DEC-2016 ',' DD-MON-YYYY ');
Auswahl * von test1.tasty1 wo DOJ = to_date ('08 -DEC-16 ',' DD-MON-YY ');
* aus test1.tasty1 auswählen, wobei DOJ = to_date ('08 -DEC-16 ',' dd-mon-RR ');
Oracle TO_DATE not working

so nicht sicher, was hier falsch ist:

hat einen Blick auf die SO folgenden auf genommen?

+0

Bitte versuchen Sie die folgende Abfrage: 'SELECT * FROM test1.tasty1 WHERE DOJ = '2016-08-12' ... gibt das irgendetwas zurück? AFAIK einige der 4 Abfragen, die Sie versuchten, sollten diesen Datensatz zurückgeben. –

+0

das obige fehlschlägt mit 'literal stimmt nicht überein Formatzeichenkette', wenn ich versuche '* aus test1.tasty1 where DOJ = '08 -DEC-16'; ' gibt keine Ergebnisse –

+0

Das ist nicht das, was ich dich gebeten habe zu laufen. Ich habe Sie gebeten, 'WHERE DOJ = '2016-08-12'' –

Antwort

0

Aus Ihrer Frage und Ihren Kommentaren scheint es, dass dies die Abfolge der Ereignisse ist, die passiert sind.

Sie haben die folgende INSERT in Ihre Tabelle:

INSERT INTO test1.tasty1 VALUES ('sat', SYSDATE) 

Beachten Sie, dass in Oracle sowohl ein Datum Komponente und eine Zeit datiert. Also, obwohl Sie das Datum '2016-12-08' eingefügt haben Sie auch eingefügt eine Zeitkomponente. Als Ergebnis wird die folgende Abfrage der Rückkehr keine Datensätze:

SELECT * FROM test1.tasty1 WHERE DOJ = '2016-08-12' 

Dies ist wahrscheinlich, weil Sie nie die Zeit-Komponente angegeben, und damit der Datensatz zuvor eingesetzt ist passend nicht. Wenn Sie nur den Datumsteil vergleichen wollen, können Sie TRUNC wie folgt verwenden:

SELECT * FROM test1.tasty1 WHERE TRUNC(DOJ) = '2016-08-12' 

Die Lösung für Ihr Problem voran wäre SYSDATE mit TRUNC während des Einsatzes wickeln, wenn Sie wirklich nur mit beschäftigen möchten die Datumskomponenten. Das Format '08-DEC-16', das als Literal verwendet wird, wird von Oracle nicht als gültiges Datum erkannt.Verwenden Sie stattdessen '2016-12-08'.

+0

Tim - danke - Ich bekomme den Zeitteil und die Notwendigkeit, TRUNC zu benutzen. Dies wird verstanden. Was ich nicht verstehe, ist - bedeutet das, dass TO_DATE nicht funktioniert, wenn eine Zeitkomponente involviert ist (was in meinem Beispiel der Fall ist)? –

+0

@satishmarathe In Ihrem Fall hat die Spalte, für die Sie den Vergleich durchführen, _does_ eine Zeitkomponente. Wenn Sie also nicht übereinstimmen, dann funktioniert der Vergleich nicht mit AFAIK. Aber wenn Sie ein abgeschnittenes Datum mit keiner Zeitkomponente gegen 'to_date 'vergleichen, die auch ohne Zeitkomponente erstellt wurde, würde ich erwarten, dass der Vergleich funktioniert. –

+0

ok so jetzt macht es Sinn - das to_date wird auch den Aspekt 'time' berücksichtigen und da wir einen Vergleich (nicht größer oder kleiner) machen - versucht es eine exakte Übereinstimmung - das wirft eine andere Frage auf - wenn Ich möchte einfach nur ein Datumsfeld verwenden und bin nicht an der Zeit interessiert - welcher Datentyp sollte ich verwenden - wird nachlesen und bei Bedarf - eine separate Frage posten - danke für Ihre Eingabe –

0

Haben Sie so als Vergleich Datum mit Datum versucht, korrekt ist:

select * from test1.tasty1 where to_date(DOJ,'DD-MM-YYYY') = to_date('08-12-2016','DD-MM-YYYY'); 

vergleichen Äpfel mit Äpfeln und nicht mit Mangos.

+0

Oracle rät davon ab, ein Date-Objekt an das to_date zu übergeben was Sie auf der LHS und FYI empfehlen - Ihre vorgeschlagene SQL gibt auch keine Ergebnisse - der Vergleich von Äpfeln mit Äpfeln ergab Orangen !!! :). Was aus @TimBiegeleisens Aussage sinnvoll ist - hier ist eine Zeitkomponente beteiligt –

Verwandte Themen