【问题标题】:wrong date insert into the datablock错误的日期插入数据块
【发布时间】:2012-12-23 03:07:28
【问题描述】:

我的问题与日期类型有关,当我想为列分配日期时,我使用下面的代码。 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。

【问题讨论】:

标签: oracle oracle9i oracleforms


【解决方案1】:

您不应该在日期上使用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”,那么您将得到 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')

Here is a sqlfiddle demo

【讨论】:

  • 所以你建议我只使用 SYSDATE 或 to_date(TO_CHAR(sysdate, 'DD/MM/YYYY HH:MI:SS AM'),'DD/MM/YYYY HH:MI:SS AM' ) 当我插入我的数据时?当我从数据库中获取查询时,我不希望它看起来像 0013。
  • 如果您的列的数据类型是日期,那么您需要只插入sysdate(它已经是日期),无需执行`to_date(TO_CHAR(... `
猜你喜欢
  • 2016-12-25
  • 2011-08-27
  • 2023-04-01
  • 2014-12-13
  • 2012-08-21
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多