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