sql >> Base de Datos >  >> RDS >> Oracle

Conversión de fecha a cadena de Oracle

Los datos en COL1 están en dd-mon-yy

No, no es. Una DATE la columna no tener cualquier formato. Solo se convierte (implícitamente) a esa representación por su cliente SQL cuando lo muestra.

Si COL1 es realmente un DATE columna usando to_date() en él es inútil porque to_date() convierte una cadena en una FECHA.

Solo necesitas to_char(), nada más:

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

Lo que sucede en tu caso es que llamar a to_date() convierte el DATE en un valor de carácter (aplicando el formato NLS predeterminado) y luego volviéndolo a convertir en una FECHA. Debido a esta doble conversión implícita, parte de la información se pierde en el camino.

Editar

Así que cometiste ese gran error al almacenar una FECHA en una columna de caracteres. Y es por eso que tienes los problemas ahora.

La mejor solución (y para ser honesto:la única sensata) es convertir esa columna en una DATE . Luego, puede convertir los valores a cualquier representación que desee sin preocuparse por la conversión implícita del tipo de datos.

Pero lo más probable es que la respuesta sea "Heredé este modelo, tengo que afrontarlo " (siempre lo es, aparentemente nadie es responsable de elegir el tipo de datos incorrecto), entonces necesita usar RR en lugar de YY :

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

debería hacer el truco. Tenga en cuenta que también cambié mon a mm como su ejemplo es 27-11-89 que tiene un número para el mes, no una "palabra" (como NOV )

Para obtener más detalles, consulte el manual:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215