2016-06-30 5 views
1

Ich versuche YYYY-MM-DD HH24 zu konvertieren: MM: SS IN MM/DD/YYYY HH24: MM: SSUmwandlung yyyy-mm-dd in mm/tt/

Der letzte Versuch war :

SQL> select to_date(to_date('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS'),'MM/DD/YYYY HH24:MI:SS') from dual 

ich habe Fehler, der sagt: Ungültige monhts, ich sehr verwirrt und müde davon bin, jemand einen Blick darauf werfen konnte?

+1

to_date erwartet eine String-Eingabe und eine optionale String-Format-Maske. Ändern Sie das äußere to_date in ein to_char, um eine Zeichenfolge des Datums im gewünschten Format zurückzugeben. –

Antwort

1

Das sollte funktionieren. Verwenden Sie to_char

select to_char(to_date('2016-05-01 00:00:00','YYYY-MM-DD 
HH24:MI:SS'),'MM/DD/YYYY HH24:MI:SS') from dual 
4

Termine nicht ein Format haben - sie sind intern vertreten durch 7- or 8- bytes. Nur wenn einem Client-Programm ein Datum übergeben wird, gibt das Client-Programm (möglicherweise) ihm ein Format.

Das Standard-String-Format für Daten in SQL/Plus oder SQL Developer wird durch die NLS_DATE_FORMAT Session-Parameter eingestellt. Andere Clients verfügen normalerweise über Parameter, die Sie für das Standarddatumsformat festlegen können (wenn sie nicht auch die Einstellungen NLS verwenden). Beachten Sie jedoch, dass der NLS_DATE_FORMAT ein Sitzungsparameter ist, so dass er zur Benutzersitzung gehört, und mehrere Benutzer jeweils einen anderen Wert für den Parameter haben können, der der Einstellung entspricht.

Wenn Sie ein Datum ein bestimmtes Format geben wollen, dann müssen Sie es in eine Zeichenfolge konvertieren:

SELECT TO_CHAR(DATE '2016-05-01', 'MM/DD/YYYY HH24:MI:SS') 
FROM DUAL; 

Warum Ihre Abfrage nicht funktioniert:

TO_DATE(value, frmt) erwartet einen String-Wert und eine Formatmaske. Die inneren TO_DATE('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS') ist vollkommen gültig und wird die DATE '2016-05-01' zurück.

Der äußere TO_DATE() wird dann jedoch den DATE Typ übergeben, den Sie gerade generiert haben, und das Zeichenfolgenformat (anstelle der zwei Zeichenfolgen, die erwartet werden). Oracle wird die NLS_DATE_FORMAT Session-Parameter als Format Maske TO_CHAR() am Tag und nutzen implizit aufrufen. Dies erzeugt eine Zeichenfolge aus dem Datum, und der Fehler NLS_DATE_FORMAT ist NLS_DATE_FORMAT ist nicht MM/DD/YYYY HH24:MI:SS, also wenn die äußere TO_DATE() versucht, die implizit erstellte Zeichenfolge zu analysieren, schlägt es fehl, da die erste Zahl, die es liest, für einen Monat ungültig ist.