Daty nie mają formatu – są reprezentowane przez 7 lub 8 bajtów .
SELECT DUMP( SYSDATE ) FROM DUAL;
Moc wyjściowa:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Ten format jest bardzo przydatny dla komputerów do porównywania dat, ale nie jest tak przydatny dla ludzi; tak więc, gdy klient SQL (SQL/plus, SQL Developers, TOAD, itp.) wyświetla datę, nie wyświetla bajtów, ale wyświetla ją jako ciąg.
Robi to poprzez niejawne wywołanie TO_CHAR()
(lub inną wewnętrzną metodę określania dat) i używa domyślnej maski formatu do wykonania tej konwersji.
SQL/Plus i SQL Developer użyją parametru sesji użytkownika NLS_DATE_FORMAT
aby wykonać tę konwersję – zobacz tę odpowiedź
w związku z tym.
Więc twoje drugie zapytanie jest niejawnie konwertowane, aby zrobić coś zbliżonego do tego (ale prawie na pewno bardziej efektywnie):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL