【问题标题】:When I enter a dateadd or datediff code i get this error all the time "ORA-00904 "DATEADD" INVALID IDENTIFIER."当我输入 dateadd 或 datediff 代码时,我总是收到此错误“ORA-00904 “DATEADD”INVALID IDENTIFIER。”
【发布时间】:2015-05-22 15:21:55
【问题描述】:

我有一个大学项目,我有一张带有入院和出院日期属性的患者表。我需要删除超过 7 年的记录,我使用了以下代码:

delete from patient
where dis_date >= datedadd(yy,-7,getdate());

我得到了错误

"ORA-00904: "DATEADD" 标识符无效"

。 DATEDIFF 函数也是如此。请问有什么替代品吗?

【问题讨论】:

标签: sql oracle oracle11g sqlplus dateadd


【解决方案1】:

在 Oracle 中执行此操作的典型方法是:

DELETE FROM patient
 WHERE dis_date < TRUNC(ADD_MONTHS(SYSDATE, -7*12));

我建议使用ADD_MONTHS() 而不是年份间隔的原因是ADD_MONTHS() 是闰年安全的。

【讨论】:

  • 谢谢@David,我想我会用你的。
  • 哇,非常感谢 - 这正是我需要的解决方案!我不敢相信这没有更多的选票。
【解决方案2】:

你可以试试这个:

DELETE FROM patient
  WHERE dis_date  < SYSDATE - INTERVAL '7' YEAR;

Oracle 中没有名为DATEADD 的函数。

【讨论】:

  • 如果当前日期是 2016 年 2 月 29 日,那将失败
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多