I dati in COL1 sono in gg-mon-aa
No non lo è. Una DATE
la colonna non avere qualsiasi formato. Viene convertito (implicitamente) in quella rappresentazione dal tuo client SQL solo quando lo visualizzi.
Se COL1 è davvero un DATE
colonna utilizzando to_date()
su di esso è inutile perché to_date()
converte una stringa in una DATE.
Hai solo bisogno di to_char(), nient'altro:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
Quello che succede nel tuo caso è chiamare to_date()
converte il DATE
in un valore di carattere (applicando il formato NLS predefinito) e quindi riconvertendolo in una DATE. A causa di questa doppia conversione implicita, alcune informazioni vengono perse lungo il percorso.
Modifica
Quindi hai commesso il grosso errore di memorizzare una DATA in una colonna di caratteri. Ed è per questo che ora hai i problemi.
La soluzione migliore (e ad essere onesti:l'unica sensata) è convertire quella colonna in un DATE
. Quindi puoi convertire i valori in qualsiasi rappresentazione che desideri senza preoccuparti della conversione implicita del tipo di dati.
Ma molto probabilmente la risposta è "Ho ereditato questo modello, devo affrontarlo " (lo è sempre, a quanto pare nessuno è mai responsabile della scelta del tipo di dati sbagliato), quindi devi usare RR
invece di YY
:
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
dovrebbe fare il trucco. Nota che ho anche cambiato mon
a mm
come il tuo esempio è 27-11-89
che ha un numero per il mese, non una "parola" (come NOV )
Per maggiori dettagli consultare il manuale:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215