2017-10-13 2 views
0

ist Ich habe Tabellenname auf Oracle 12c, die Spalte_Name1 mit Datentyp "TIMESTAMP (6) mit Zeitzone" hat. Ich benutze SQL Developer."AM/A.M. Oder PM/P.M. erforderlich" -Fehler, obwohl AM

Wenn ich etwas aus diesem column_name1 mit SQL Developer auswählen, sehe ich das Datum wie: 19-SEP-17 03.19.55.000000000 PM +00:00, die in UTC ist.

Wenn ich das gleiche Format in meinem SQL verwende und es als String in WHERE-Klausel gebe, funktioniert es gut. Beispiel:

select column_name1 from table_name where column_name1 = '19-SEP-17 03.19.55.000000000 PM +00:00'; 

Aber ich weiß, es wird empfohlen, String in Situationen wie diesem zu konvertieren. Wenn ich versuche, dies mit TO_TIMESTAMP zu tun, finde ich nicht das korrekte Format, das in SQL hinzugefügt werden muss.

Was ich versucht habe, ist:

select column_name1 from table_name where column_name1 = TO_TIMESTAMP('19-SEP-17 03.19.55.000000000 PM +00:00', 'DD-MON-YYYY HH:MI:SS.FF A.M. TZH:TZM'); 

Und obwohl AM/PM schon da ist, bekomme ich Fehler noch als: AM/A.M. or PM/P.M. required

Ich habe versucht, Hinzufügen von 'NLS_DATE_LANGUAGE = American' als auch aber immer noch denselben Fehler.

Was fehlt mir hier? Wie kann ich das TO_TIMESTAMP-Format ändern, damit ich diese Zeichenfolge in TIMESTAMP umwandeln kann?

Antwort

3

Verwenden Sie eigentlich TO_TIMESTAMP_TZ - wie Sie sollten, da die Spalte Zeitstempel MIT ZEITZONE ist, und die Eingabezeichenfolge und das Formatmodell sind beide für Zeitstempel MIT ZEITZONE? (Wenn Sie TO_TIMESTAMP so verwenden, erhalten Sie einen anderen Fehler, etwa "Datumsformat nicht erkannt" - da Sie keine Zeitzonenformatelemente im Formatmodell für einen Zeitstempel ohne Zeitzone haben können).

Angenommen, dies ist der Fall: Das Problem wird durch die Übergabe (ohne Punkte) in der Eingabezeichenfolge, aber A.M. (mit Punkten) im Format-Modell verursacht. Verwenden Sie an beiden Stellen das gleiche Format - entweder mit Punkten oder ohne sie, aber konsistent.

An einigen Stellen macht sich Oracle keine Gedanken über nicht übereinstimmende Trennzeichen, aber in diesem Fall tut es dies. Wenn Sie möchten, können Sie die Dokumentation durchsuchen, um genau herauszufinden, welche Substitutionen Oracle versuchen wird; aber das klingt nach einer akademischen Übung. Seien Sie einfach konsistent zwischen der Eingabezeichenfolge und dem Formatmodell und Sie werden keine Probleme haben.

+0

Vielen Dank für Ihre Antwort und Entschuldigung für die Überprüfung dieser sehr spät. Ich änderte schließlich das Standard-Zeitstempelanzeigeformat in Oracle SQL Developer und änderte es in 'YYYY-MM-DD HH24.MI.SSXFF' und für Zeitstempel mit Zeitzone' YYYY-MM-DD HH24.MI.SSXFF TZR'. Ich habe es aus Tools -> Einstellungen -> Datenbank -> NLS – 300

+0

@ 300 - Die meisten Entwickler bevorzugen das 24-Stunden-Format (weniger Verwirrung, weniger Möglichkeiten für lästige Regeln wie diese). AM/PM würde für Nicht-Tech- "Verbraucher" -Berichte verwendet werden. – mathguy

Verwandte Themen