Datoer har ikke et format - de er repræsenteret af 7- eller 8-bytes .
SELECT DUMP( SYSDATE ) FROM DUAL;
Udsender muligvis:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Dette format er meget nyttigt for computere til at sammenligne datoer, men ikke så nyttigt for folk; så når SQL-klienten (SQL/plus, SQL Developers, TOAD osv.) viser en dato, viser den ikke bytes, men viser den som en streng.
Det gør det ved at foretage et implicit kald til TO_CHAR()
(eller en anden intern metode til at stringificere datoer) og bruger en standardformatmaske til at udføre denne konvertering.
SQL/Plus og SQL Developer vil bruge brugerens sessionsparameter NLS_DATE_FORMAT
for at udføre denne konvertering - se dette svar
om dette.
Så din anden forespørgsel bliver implicit konverteret til at gøre noget, der nærmer sig dette (men næsten helt sikkert mere effektivt):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL