Data nemají formát – jsou reprezentována 7 nebo 8 bajtů .
SELECT DUMP( SYSDATE ) FROM DUAL;
Možná výstup:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Tento formát je velmi užitečný pro počítače k porovnání dat, ale není tak užitečný pro lidi; takže když klient SQL (SQL/plus, SQL Developers, TOAD atd.) zobrazí datum, nezobrazí bajty, ale zobrazí je jako řetězec.
Dělá to implicitním voláním TO_CHAR()
(nebo nějakou jinou interní metodu stringifikace dat) a k provedení tohoto převodu používá masku výchozího formátu.
SQL/Plus a SQL Developer použijí parametr relace uživatele NLS_DATE_FORMAT
k provedení této konverze – viz tuto odpověď
ohledně toho.
Takže váš druhý dotaz se implicitně převádí na něco, co se tomuto blíží (ale téměř jistě efektivněji):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL