Oracle Date to_char返回不同的结果

问题描述:

我在本地开发机器上有一个数据库,并且在我们的测试服务器上有一个数据库。基本上,我的开发机器上的表格是从测试机器上复制过来的。Oracle Date to_char返回不同的结果

但是,我发现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

+4

您确定底层数据是相同的吗? –

+3

只要它是**相同的数据**这是不可能的。 –

+0

您能否准确描述表格是如何从测试机器复制的? –

因此您使用DD-MON-YY格式将表格的内容导出到csv文件。 YY显然引起歧义。我想,当你导入的文件,99被解释为1999年而不是1899年,我不知道这是使用数据库来猜测全年的确切机制,但无论如何,甲骨文strongly recommends YYYY in date format

注:由于以下原因,Oracle建议您使用4位年份元素(YYYY) 而不是年份较短的元素:年份的4位 消除了不明确性。

较短的年份元素可能会影响查询优化,因为 年在查询编译时未知,只能在 运行时确定。

+0

当我尝试导出表格的内容为SQL插入语句时,我发现'1899-12-31'被插入为'to_date('31 -DEC-99','DD-MON-RR')',它变成'1999-12-31'在我的开发数据库中。 *鉴于*'2012-02-23'作为'to_date('23 -FEB-12','DD-MON-RR')'插入,并在我的开发数据库中成为'2012-02-23'。 –