具有不同结果的 Oracle to_date 过程

Oracle to_date procedure with different results

我正在使用以下代码调用 Oracle 过程:

begin
PPT2000_AGG_HOURLY.RUNDURATION_HOURLY(4, to_date('01112014', 'DDMMYYYY'), 20);
end;
/

我的问题是日期格式。在一台 PC 上,该程序计算日期 01.11.2014 00:00.

的结果都很好

在另一台PC上(相同版本的Oracle SQL Developer)程序returns 0 用于计算和日期 01.11.2014

所以转换日期似乎有些不同,我不知道为什么。我用第三台电脑试了一下,也得到了 01.11.2014 的 return。

给出正确结果的PC具有相同的操作系统(WIN7德语)和相同版本的Oracle SQL Developer。同样是 Oracle 数据库。

这怎么可能?

更新解决方案: 感谢您的回答,我将 NLS 设置从 DD.MM.RR 更改为 DD.MM.RR HH24:MI,现在可以使用了:)

检查 SQL Developer 中的 NLS 首选项以查看是否存在不匹配。转到首选项 - >数据库 - > NLS。如果需要,您还可以在每个会话的基础上覆盖这些设置。

你应该在代码中处理显示格式,而不是依赖于客户端的NLS_DATE_FORMAT。您不能期望 1000 个用户在他们基于 GUI 的客户端工具中更改他们的本地 NLS 设置。

日期没有格式。您所看到的只是为了显示,具体取决于 客户端 .

区域设置特定 NLS_DATE_FORMAT

并且 NLS_DATE_FORMAT 可以在不同级别 覆盖 。如果您不想依赖客户端的 NLS 设置,请始终使用 TO_CHAR 和所需的格式掩码,以确保它在 个别语句中被覆盖等级.

请记住,要显示 DATE 值,请始终使用具有所需格式的 TO_CHAR。要进行日期运算,请使用 TO_DATE 将文字转换为 DATE。

例如,

TO_CHAR(date_column, '<desired_format>')

它将在语句级别覆盖特定于语言环境的 NLS_DATE_FORMAT。

查看此 以获得更多理解。

如果你真的有一个固定的日期,那么使用 Oracle DateTime literal。它每次都有效,并且独立于 NLS_DATE_FORMAT:

begin
  PPT2000_AGG_HOURLY.RUNDURATION_HOURLY(4, DATE '2014-11-01', 20);
end;
/