Datumsangaben haben kein Format – sie werden durch 7- oder 8-Byte dargestellt .
SELECT DUMP( SYSDATE ) FROM DUAL;
Könnte ausgeben:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Dieses Format ist sehr nützlich für Computer, um Daten zu vergleichen, aber nicht so nützlich für Menschen; Wenn also der SQL-Client (SQL/plus, SQL Developers, TOAD usw.) ein Datum anzeigt, zeigt er nicht die Bytes an, sondern zeigt es als Zeichenfolge an.
Dies geschieht durch einen impliziten Aufruf von TO_CHAR()
(oder eine andere interne Methode zum Stringifizieren von Daten) und verwendet eine Standardformatmaske, um diese Konvertierung durchzuführen.
SQL/Plus und SQL Developer verwenden den Sitzungsparameter NLS_DATE_FORMAT
des Benutzers Um diese Konvertierung durchzuführen, siehe diese Antwort
diesbezüglich.
Ihre zweite Abfrage wird also implizit so konvertiert, dass sie etwas Ähnliches tut (aber mit ziemlicher Sicherheit effizienter):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL