下面查询的输出是4,但我不明白为什么。这里发生了什么?
SELECT GREATEST(NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3, 0) FROM DUAL
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 给你今天;在这种情况下,您需要减去一天:
TRUNC(SYSDATE)
NEXT_DAY(TRUNC(SYSDATE), 'MON')
NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE)
NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3
GREATEST(NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3, 0)
next_day
答案是0。从文件中(重点加上): NEXT_DAY 返回由指定的第一个工作日的日期 char 比日期晚。比今天晚的下周一是下周一,不是今天。db<>小提琴
NEXT_DAY
char
ryevplcw2#
这是因为 select NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3 from dual 是4
select NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3 from dual
2条答案
按热度按时间dfty9e191#
将其分解为以下步骤:
TRUNC(SYSDATE)
is 2020-06-29NEXT_DAY(TRUNC(SYSDATE), 'MON')
是今天之后的下周一,也就是2020-07-06NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE)
是2020-06-29和2020-07-06之间的天数,即7NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3
是7减3,也就是4GREATEST(NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3, 0)
是0和4中的较大值,即4也许你预料到了
next_day
给你今天;在这种情况下,您需要减去一天:答案是0。
从文件中(重点加上):
NEXT_DAY
返回由指定的第一个工作日的日期char
比日期晚。比今天晚的下周一是下周一,不是今天。
db<>小提琴
ryevplcw2#
这是因为
select NEXT_DAY(TRUNC(SYSDATE), 'MON') - TRUNC(SYSDATE) - 3 from dual
是4