Las fechas no tienen formato:están representadas por 7 u 8 bytes .
SELECT DUMP( SYSDATE ) FROM DUAL;
Podría producir:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Este formato es muy útil para que las computadoras comparen fechas pero no tanto para las personas; por lo tanto, cuando el cliente SQL (SQL/plus, SQL Developers, TOAD, etc.) muestra una fecha, no muestra los bytes sino que los muestra como una cadena.
Lo hace haciendo una llamada implícita a TO_CHAR()
(o algún otro método interno para clasificar fechas) y utiliza una máscara de formato predeterminada para realizar esta conversión.
SQL/Plus y SQL Developer usarán el parámetro de sesión del usuario NLS_DATE_FORMAT
para realizar esta conversión:consulte esta respuesta
con respecto a esto.
Entonces, su segunda consulta se convierte implícitamente para hacer algo parecido a esto (pero, casi con seguridad, de manera más eficiente):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL