我的问题与日期类型有关,当我想为列指定日期时,我正在使用下面的代码。 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。
答案 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')