0

我的问题与日期类型有关,当我想为列分配日期时,我使用下面的代码。D_REPORT := to_date(sysdate,'DD/MM/YYYY HH:MI:SS AM');

但有时我会收到像 31/01/0013 12:24:36 这样的日期!

我不知道为什么有时年份会显示为 0013,并且仅适用于少数系统,即使我使用 sysdate,也会出现同样的问题。

我想和你确认一下,其他人也有同样的问题吗?我该如何解决?因为即使我使用 to_date 或只是简单地编写 sysdate 也会发生同样的问题,我不知道问题的根本原因是什么。

我正在使用 oracle form 6i,我的数据库是 oracle 9i。

4

1 回答 1

3

您不应该to_date在日期上使用(并且sysdate是日期)。

TO_DATE 将 avarchar2作为参数,因此 oracle 会根据 NLS_DATE_FORMAT 将您的日期(sysdate)隐式转换为 varchar2,这可能并非'DD/MM/YYYY HH:MI:SS AM'在每个环境中都存在。

如果 NLS_DATE_FORMAT 是 'DD/MM/YY HH:MI:SS AM' 那么你会得到 year=0013,因为真正发生的事情是这样的:

SELECT  to_date(TO_CHAR(sysdate, 'DD/MM/YY HH:MI:SS AM'),'DD/MM/YYYY HH:MI:SS AM')
FROM dual;

因此,您只需要插入sysdate并在显示时(将其转换为字符串)使用to_char(sysdate,'DD/MM/YYYY HH:MI:SS AM')

这是一个 sqlfiddle 演示

于 2013-01-09T06:35:59.673 回答