【问题标题】:ORA-30076 when trying to find days between dates尝试查找日期之间的天数时出现 ORA-30076
【发布时间】:2013-09-20 14:33:05
【问题描述】:

我试图找出两个日期之间的天数。 我尝试运行以下查询,结果出现 ORA-30076 错误。

查询是,

select extract(day from (sysdate - to_date('2009-10-01', 'yyyy-mm-dd'))) 
 from dual

错误是,

Error at Command Line:1 Column:34
Error report:
SQL Error: ORA-30076: invalid extract field for extract source
30076. 00000 -  "invalid extract field for extract source"
*Cause:    The extract source does not contain the specified extract field.

但是当我尝试运行时

Select extract(day from sysdate) from dual;

我得到了正确的输出。

如果有人知道我收到上述错误的原因,请提供帮助。

【问题讨论】:

  • 你不需要提取,看这个:stackoverflow.com/questions/1646001/…
  • 只使用date'2009-10-01' 而不是to_date。
  • sysdate - to_date('2009-10-01', 'yyyy-mm-dd') 就足够了。不需要extract

标签: sql oracle


【解决方案1】:

从另一个日期减去一个日期不会返回日期,它会返回一个代表天数差异的数字,因此您不能使用提取。

【讨论】:

    【解决方案2】:

    sysdate - to_date('2009-10-01', 'yyyy-mm-dd') 将给出两个日期之间的 天数 差异 - 无需使用 extract 函数。此外,在这种情况下,extract 函数的使用将是不正确的,因为它会期望在from 子句之后表达日期或间隔数据类型,并且sysdate - to_date('2009-10-01', 'yyyy-mm-dd') 减法的结果是数字数据类型 - 导致您面临的错误。

    【讨论】:

      【解决方案3】:

      这个:

       sysdate - to_date('2009-10-01', 'yyyy-mm-dd')
      

      返回一个数字,而不是日期。您只能从日期中提取天数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-26
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多