【问题标题】:How To Insert a Date using oracle form如何使用 oracle 表单插入日期
【发布时间】: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


    【解决方案1】:

    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)
    

    【讨论】:

      【解决方案2】:

      SYSDATE 已经是一个 DATE。您无需使用 TO_DATE 将其转换为 DATE。

      发生的情况是您将 SYSDATE 转换为字符串,并且您使用的是 YYYY 掩码,该掩码会将 2000 年以上的任何年份转换为 00 年(这就是 2015 年转换为 15 年的原因)。如果你使用 RRRR 掩码,你会得到预期的结果:

      TO_DATE(SYSDATE,'dd-mm-rrrr')
      

      但是,这不是一个好主意,因为它是不必要的,如果用于隐式转换为字符串的 NLS_DATE_FORMAT 模型不匹配,它可能会失败。

      【讨论】:

      • 这将 (a) 仍然执行不必要的字符串转换并返回,并且 (b) 如果用于隐式转换为字符串的 NLS_DATE_FORMAT 模型不匹配,则会失败;例如如果那是 mm/dd/yyyy。它充其量只能暂时解决问题,这不是一个好主意。
      • @AlexPoole 当然,这是不必要的转换。我在回答的第一行就这么说了。我将编辑我的答案以说明这样做不是一个好主意,甚至可能会失败。我只是想解释一下为什么他得到的是 15 年而不是 2015 年。
      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多