Tanggal tidak memiliki format - tanggal diwakili oleh 7- atau 8-byte .
SELECT DUMP( SYSDATE ) FROM DUAL;
Mungkin keluaran:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Format ini sangat berguna bagi komputer untuk membandingkan tanggal tetapi tidak begitu berguna bagi orang-orang; jadi, ketika klien SQL (SQL/plus, SQL Developers, TOAD, dll) menampilkan tanggal, ia tidak menampilkan byte tetapi menampilkannya sebagai string.
Ini dilakukan dengan membuat panggilan implisit ke TO_CHAR()
(atau metode internal lainnya untuk merangkai tanggal) dan menggunakan format mask default untuk melakukan konversi ini.
SQL/Plus dan Pengembang SQL akan menggunakan parameter sesi pengguna NLS_DATE_FORMAT
untuk melakukan konversi ini - lihat jawaban ini
mengenai hal ini.
Jadi kueri kedua Anda secara implisit sedang dikonversi untuk melakukan sesuatu yang mendekati ini (tetapi, hampir pasti, lebih efisien):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL