Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Konvertierung von Oracle-Datum in Zeichenfolge

Die Daten in COL1 sind im Format tt-mon-jj

Nein, ist es nicht. Ein DATE Spalte nicht irgendein Format haben. Es wird nur (implizit) von Ihrem SQL-Client in diese Darstellung konvertiert, wenn Sie es anzeigen.

Wenn COL1 wirklich ein DATE ist Spalte mit to_date() darauf ist nutzlos, weil to_date() wandelt einen String in ein DATE um.

Sie brauchen nur to_char(), sonst nichts:

SELECT TO_CHAR(col1, 'mm/dd/yyyy') 
FROM TABLE1

Was in Ihrem Fall passiert, ist der Aufruf von to_date() konvertiert das DATE in einen Zeichenwert (unter Anwendung des Standard-NLS-Formats) und dann zurück in ein DATUM umzuwandeln. Aufgrund dieser doppelten impliziten Konvertierung gehen einige Informationen auf dem Weg verloren.

Bearbeiten

Sie haben also den großen Fehler gemacht, ein DATUM in einer Zeichenspalte zu speichern. Und deswegen bekommst du jetzt die Probleme.

Die beste (und um ehrlich zu sein:einzig vernünftige) Lösung besteht darin, diese Spalte in ein DATE umzuwandeln . Anschließend können Sie die Werte in jede gewünschte Darstellung konvertieren, ohne sich Gedanken über die implizite Datentypkonvertierung machen zu müssen.

Aber höchstwahrscheinlich lautet die Antwort "Ich habe dieses Modell geerbt, ich muss damit fertig werden " (das ist es immer, anscheinend ist niemand für die Wahl des falschen Datentyps verantwortlich), dann müssen Sie RR verwenden statt YY :

SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1

sollte den Trick machen. Beachten Sie, dass ich auch mon geändert habe bis mm Ihr Beispiel ist 27-11-89 die eine Zahl für den Monat hat, kein "Wort" (wie NOV )

Weitere Details finden Sie im Handbuch:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215