Датите нямат формат - те са представени от 7- или 8-байта .
SELECT DUMP( SYSDATE ) FROM DUAL;
Може да изведе:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Този формат е много полезен за компютри за сравняване на дати, но не толкова полезен за хората; така че, когато SQL клиентът (SQL/plus, SQL Developers, TOAD и т.н.) показва дата, той не показва байтовете, а я показва като низ.
Той прави това чрез скрито извикване на TO_CHAR()
(или някакъв друг вътрешен метод за низиране на дати) и използва маска за формат по подразбиране, за да извърши това преобразуване.
SQL/Plus и SQL Developer ще използват параметъра на сесията на потребителя NLS_DATE_FORMAT
за да извършите това преобразуване - вижте този отговор
относно това.
Така че втората ви заявка имплицитно се преобразува, за да направи нещо подобно на това (но почти сигурно по-ефективно):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL