我的本地开发机器上有一个数据库,我们的测试服务器上有一个数据库。基本上,我的开发机器上的表格是从测试机器上复制过来的。
但是,我发现to_char
函数处理相同日期的方式有所不同。在我的开发机器上,如果我运行以下查询:
select test_date, to_char(test_date, 'YYYY-MM-DD')
from test.table
where id = 'C0007784'
我得到以下结果:
31-DEC-99 1999-12-31
在针对相同架构和数据运行相同查询的测试服务器上,我得到以下内容:
31-DEC-99 1899-12-31
to_char
的行为差异可能是由于两个Oracle实例中的设置不同吗?
如果我运行SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT';
,我会为这两个实例获得DD-MON-RR
。
答案 0 :(得分:2)
因此,您使用DD-MON-YY格式将表的内容导出到csv文件。 YY显然会引起歧义。我想当你导入文件时,99被解释为1999而不是1899.我不知道数据库用来猜测整年的确切机制,但无论如何Oracle strongly recommends YYYY in date format:
注意:Oracle建议您使用4位数年份元素(YYYY) 由于这些原因,而不是较短的年份元素:4位数 年元素消除了歧义。
较短的年份元素可能会影响查询优化,因为 在查询编译时不知道year,只能在 运行时间。