【发布时间】:2021-07-20 19:48:48
【问题描述】:
我想获得最后一个工作日。 如果是周二到周六,那就是前一天。如果是周日或周一,那就是周五。
到目前为止,我已经尝试过这个,但我正在努力获得所需的输出。
SELECT
level AS dow,
trunc(sysdate, 'D') + level day,
to_char(trunc(sysdate, 'D') + level, 'Day') AS day_week,
CASE
WHEN to_char(trunc(sysdate, 'D') + level, 'Day') IN (
'Sunday',
'Monday'
) THEN
trunc(sysdate - 2, 'IW') + 4
ELSE
sysdate - 1
END calculation
FROM
dual
CONNECT BY
level <= 7;
【问题讨论】:
-
trunc(sysdate, 'D')的结果取决于当前用户会话NLS_TERRITORY设置。 MT0 建议更好地使用IW