【发布时间】:2016-11-23 10:29:17
【问题描述】:
我的本地开发机器上有一个数据库,我们的测试服务器上有一个数据库。基本上,我的开发机器上的表是从测试机器上复制过来的。
但是,我发现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。
【问题讨论】:
-
你确定底层数据是一样的吗?
-
如果是相同的数据这是不可能的。
-
您能否准确描述一下该表是如何从测试机复制的?
-
@DavidBrower 不,它没有。年份格式的唯一正确方法是 4 位数字。用 YYYY 显示结果,我们看看是否相同。
-
那么你可能会导出像
31-DEC-99这样的stings。这可能在目标数据库中被错误解释。叶芝应该总是四位数。显然你在上个世纪就没有在 IT 世界工作过,否则你会意识到“2000 年问题”。