你在两个版本中做多的隐式转换日期。此:
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;
,而第二查询具有那些与一个指定格式替换之一。它看起来像你的默认格式 - 我相信你可以在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 Fiddle)
可以在this SQL Fiddle,在看到第一个版本中,日期显示为年份为49
而非1949
的字符串,然后将其解释为RR
掩码 - 为2049
,这是预期的行为。
简短版本:从不依赖隐式日期转换或NLS日期格式掩码。
您的问题中显示的NLS_DATE_FORMAT是1949年的结果吗? –
不,我添加了密钥,而且我仍然得到相同的结果 – Luis
对于'YYYY/MM/DD'的NLS_DATE_FORMAT,我希望您可以将日期格式设置为'2049/02/01'。检查TOAD是否在其配置中包含某些东西,使其使用“RR”或“RRRR”年格式格式化日期(请参见[here](http://docs.oracle.com/cd/B19306_01/server.102 /b14200/sql_elements004.htm#i34510)查看TO_CHAR日期格式模型上的文档)。 –