Oracle NUMTODSINTERVAL 函数和区间函数



有人可以解释一下下面在做什么吗?

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

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

我的理解是,NUMTODSINTERVAL 将一个数字转换为间隔日到秒文字。

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

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

这是对的还是我看错了?另外,为什么开发人员会使用这种方法?

NUMTODSINTERVAL 的第二个参数指定单位。"间隔天到秒"是一个令人困惑的名称 - 它只是意味着一个抽象的时间间隔,在本例中为 5 天。

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

所以今天它说,取 2 月 5 日,减去 5 天(= 1 月 31 日(,然后加上一天(所以 2 月 1 日(。

它似乎试图找到该月的第一天,这将简单得多:

 and effective_DATE < TRUNC(CURRENT_DATE, 'MM')

最新更新