【发布时间】:2015-10-29 17:51:38
【问题描述】:
我使用 oracle 表单 11g。我传递了插入数据库的To_Date(sysdate,'dd-mm-yyyy'),列的数据类型是date。但它被插入为 22-10-0015 而不是 22-10-2015 你能帮我吗?
我使用程序从按钮单击插入数据s和oracle。我需要将dd-mm-yyyy格式插入数据库怎么做?
【问题讨论】:
标签: oracle11g oracleforms
我使用 oracle 表单 11g。我传递了插入数据库的To_Date(sysdate,'dd-mm-yyyy'),列的数据类型是date。但它被插入为 22-10-0015 而不是 22-10-2015 你能帮我吗?
我使用程序从按钮单击插入数据s和oracle。我需要将dd-mm-yyyy格式插入数据库怎么做?
【问题讨论】:
标签: oracle11g oracleforms
sysdate 已经是一个日期,所以调用to_date() 是没有意义的。您将其隐式转换为字符串,然后显式返回日期。隐含的步骤是使用您的 Forms 会话的 NLS_DATE_FORMAT,这可能是症状中的 DD-MM-YY,所以您确实在做:
to_date(to_char(sysdate,'dd-mm-yy'),'dd-mm-yyyy')
如果您自己运行,隐式字符串版本会将年份显示为 15;并且显式转换正确地将其视为 0015 而不是假设 2015。
你应该直接传递sysdate;但如果你想去掉时间,让它显示为午夜,你可以使用the trunc() function:
trunc(sysdate)
【讨论】:
SYSDATE 已经是一个 DATE。您无需使用 TO_DATE 将其转换为 DATE。
发生的情况是您将 SYSDATE 转换为字符串,并且您使用的是 YYYY 掩码,该掩码会将 2000 年以上的任何年份转换为 00 年(这就是 2015 年转换为 15 年的原因)。如果你使用 RRRR 掩码,你会得到预期的结果:
TO_DATE(SYSDATE,'dd-mm-rrrr')
但是,这不是一个好主意,因为它是不必要的,如果用于隐式转换为字符串的 NLS_DATE_FORMAT 模型不匹配,它可能会失败。
【讨论】: