具有不同结果的 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;
/
我正在使用以下代码调用 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;
/