了解sql中的日期函数

pobjuy32  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(584)

下面查询的输出是4,但我不明白为什么。这里发生了什么?

SELECT GREATEST(NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3, 0) 
  FROM DUAL
dfty9e19

dfty9e191#

将其分解为以下步骤: TRUNC(SYSDATE) is 2020-06-29 NEXT_DAY(TRUNC(SYSDATE), 'MON') 是今天之后的下周一,也就是2020-07-06 NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) 是2020-06-29和2020-07-06之间的天数,即7 NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3 是7减3,也就是4 GREATEST(NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3, 0) 是0和4中的较大值,即4
也许你预料到了 next_day 给你今天;在这种情况下,您需要减去一天:

GREATEST(NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3, 0)

答案是0。
从文件中(重点加上): NEXT_DAY 返回由指定的第一个工作日的日期 char 比日期晚。
比今天晚的下周一是下周一,不是今天。
db<>小提琴

ryevplcw

ryevplcw2#

这是因为 select NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3 from dual 是4

相关问题