错误的日期插入数据块

时间:2013-01-09 05:44:00

标签: oracle oracle9i oracleforms

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

但有时我收到的日期如31/01/1313 12:24:36 !!

我不知道为什么有些年份会像0013一样出现,它只适用于少数几个系统,即使我使用的是sysdate,也会出现同样的问题。

我想和你核实,其他人也有同样的问题吗?我怎么解决呢? 因为即使我使用to_date或只是简单地写sysdate同样的问题也会发生在我身上,我不知道问题的根本原因是什么。

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

1 个答案:

答案 0 :(得分:3)

您不应在日期上使用to_date(而sysdate是日期)。

TO_DATE获取varchar2作为参数,因此oracle根据NLS_DATE_FORMAT隐式地将您的日期(sysdate)转换为varchar2,在每个环境中可能不是'DD/MM/YYYY HH:MI:SS AM'

如果NLS_DATE_FORMAT是'DD / MM / YY HH:MI:SS AM',那么你将获得年份= 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')

Here is a sqlfiddle demo