【问题标题】:get value from table where date difference is more then certain value [duplicate]从日期差异大于某个值的表中获取值[重复]
【发布时间】:2018-11-21 16:06:39
【问题描述】:

我有一个表EMPLOYEE_STATUS,有列 SUBMIT_DATE 值为 11-05-18 11:27:34.086000000 AMUPDATED_ON 的值为11-06-18 12:55:22.064000000 PM 这基本上是当前日期。

我需要一个 oracle 数据库的 sql 查询来查找提交日期与更新日期或当前日期之间的天数差异为 30 天或更长时间的那些行。 我尝试了DATEDIFF 功能,但无法使其工作。

我尝试了以下方法(不起作用):

select * from EMPLOYEE_STATUS e 
where DATEDIFF(month, '12-06-18 03:34:09.448000000 PM', e.SUBMIT_DATE) >=1

【问题讨论】:

  • 能否将您尝试过的代码包含在内(但不起作用)?
  • select * from EMPLOYEE_STATUS e where DATEDIFF(month, '12-06-18 03:34:09.448000000 PM', e.SUBMIT_DATE) >=1;它不工作。
  • SELECT * FROM employee_status WHERE submit_date >= TIMESTAMP '2012-06-18 15:34:09.448' + INTERVAL '30' DAY

标签: sql oracle datediff


【解决方案1】:

DATEDIFF() 函数不包含在 Oracle SQL 服务器中(如本文所述)。相反,您只需将日期彼此相减,如下所示:

SELECT (11-06-18 12:55:22.064000000 PM) - (11-05-18 11:27:34.086000000 AM);

返回天数的差异。因此,您必须对此进行补偿(在您的示例中,您正在寻找一个月的差异,可能是 28 到 31 天之间的任何时间)。

对于使用 MySQLSQL Server 的用户,您可以这样做:

SELECT DATEDIFF(month, '2018-05-11 11:27:34', '2018-06-11 12:55:22') AS DateDiff;

【讨论】:

  • 我在上面尝试过,输出是 ORA-00923:FROM 关键字未在预期的位置找到 00923。00000 -“FROM 关键字未在预期的位置找到” *原因:*操作:行错误:1 列:80
  • DATEDIFF 不是 Oracle 函数
  • @shrikant.sharma 感谢您指出这一点。我习惯在 SQL Server 中工作。我已经编辑了我的答案。
  • 好的,但它不起作用,以及如何添加列名称而不是硬编码日期。
  • @shrikant.sharma 您只需将其中一个值(在您的情况下为第一个)替换为列名。
猜你喜欢
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多