Oracle
 sql >> Database >  >> RDS >> Oracle

Conversione da data Oracle a stringa

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