Anda melakukan beberapa konversi tanggal implisit di kedua versi. Ini:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
setara dengan:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
sedangkan kueri kedua memiliki salah satu yang diganti dengan format tertentu. Sepertinya format default Anda - yang dapat Anda atur, saya yakin, dalam preferensi Toad tanpa memodifikasi registri secara langsung; tidak jelas apakah Anda bahkan memodifikasi sesuatu yang berhubungan dengan Toad - apakah DD-MON-RR
, seperti yang ditunjukkan dengan memasukkannya ke dalam kueri berikut:
SELECT to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
'DD-MON-RR'),'DD-MON-RR') AS date1,
to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
'dd-MON-yyyy'),'DD-MON-RR') AS date2 FROM DUAL;
DATE1 DATE2
February, 01 2049 00:00:00+0000 February, 01 1949 00:00:00+0000
(SQL Fiddle )
Anda dapat melihat di Fiddle SQL ini
bahwa pada versi pertama, tanggal muncul sebagai string dengan tahun sebagai 49
daripada 1949
, dan itu kemudian ditafsirkan - oleh RR
topeng - sebagai 2049
, yang merupakan perilaku yang diharapkan.
Versi singkat:jangan pernah mengandalkan konversi tanggal implisit atau topeng format tanggal NLS.