両方のバージョンで複数の暗黙的な日付変換を行っています。これ:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
と同等です:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
一方、2番目のクエリでは、そのうちの1つが特定の形式に置き換えられています。これはデフォルトのフォーマットのように見えます。レジストリを直接変更しなくても、Toadプリファレンスで設定できると思います。 Toadに関連するものを変更しているのかどうかは明確ではありません-DD-MON-RR
、これらのクエリにプラグインすることで示されるように:
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フィドル )
このSQLフィドル
で確認できます。 最初のバージョンでは、日付は年が49
の文字列として表示されます。 1949
ではなく 、そしてそれは解釈されます-RR
マスク-2049
として 、これは予想される動作です。
短いバージョン:暗黙の日付変換やNLS日付形式マスクに依存しないでください。