Oracle NUMTODSINTERVAL函数和间隔函数

时间:2019-02-05 16:35:42

标签: oracle

有人可以解释以下内容吗?

and effective_DATE < (TRUNC(CURRENT_DATE) - NUMTODSINTERVAL(EXTRACT(DAY FROM TRUNC( CURRENT_DATE)), 'DAY' ) + INTERVAL '1' DAY) 

我无权访问数据库,因此无法自己运行以进行测试。

我了解到NUMTODSINTERVAL将数字转换为INTERVAL DAY TO SECOND文字。

所以说如果我今天运行此查询,它将检查生效日期是否少于2019年2月5日-将5天转换为秒加1天?

那么,2月5日-000000005 + 1 = 2月6日?

这是正确的还是我看错了? 还有为什么开发人员会使用这种方法?

1 个答案:

答案 0 :(得分:1)

NUMTODSINTERVAL的第二个参数指定单位。 “ INTERVAL DAY TO SECOND”是一个令人困惑的名称-仅表示一个抽象的时间间隔,在这种情况下为5天。

EXTRACT(DAY FROM TRUNC( CURRENT_DATE))查找该月的当前日期(今天为5) NUMTODSINTERVAL(5, 'DAY')创建的间隔为+5天

今天说,就是2月5日,减去5天(即1月31日),然后加上1天(即2月1日)。

似乎正在尝试查找该月的第一天,因为它会简单得多:

 and effective_DATE < TRUNC(CURRENT_DATE, 'MM')