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

convertir aaaa-mm-dd en mm/dd/aaaa

Las fechas no tienen formato:se representan internamente mediante 7 u 8 bytes . Solo cuando a un programa cliente se le pasa una fecha, ese programa cliente (potencialmente) le da un formato.

El formato de cadena predeterminado para fechas en SQL/Plus o SQL Developer lo establece NLS_DATE_FORMAT parámetro de sesión. Otros clientes suelen tener parámetros que puede configurar para el formato de fecha predeterminado (si no usan también el NLS ajustes). Sin embargo, tenga en cuenta que el NLS_DATE_FORMAT es un parámetro de sesión, por lo que pertenece a la sesión del usuario y varios usuarios pueden tener un valor diferente para el parámetro correspondiente a cómo lo han configurado.

Si desea dar a una fecha un formato específico, deberá convertirlo en una cadena:

SELECT TO_CHAR( DATE '2016-05-01', 'MM/DD/YYYY HH24:MI:SS' )
FROM   DUAL;

Por qué no funciona tu consulta :

TO_DATE( value, frmt ) espera un valor de cadena y una máscara de formato. El TO_DATE('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS') interno es perfectamente válido y devolverá el DATE '2016-05-01' .

Sin embargo, el TO_DATE() externo entonces se pasa el DATE tipo que acaba de generar y el formato de cadena (en lugar de las dos cadenas que espera). Oracle llamará implícitamente a TO_CHAR() en la fecha y use el NLS_DATE_FORMAT parámetro de sesión como la máscara de formato. Esto genera una cadena a partir de la fecha y, dado el error, el valor de NLS_DATE_FORMAT no es MM/DD/YYYY HH24:MI:SS entonces cuando el exterior TO_DATE() intenta analizar la cadena creada implícitamente, falla porque el primer número que lee no es válido durante un mes.