首页 > 解决方案 > 甲骨文获取上个工作日周一至周五

问题描述

我想获得最后一个工作日。如果是周二到周六,那就是前一天。如果是星期天或星期一,那就是星期五。

到目前为止,我已经尝试过了,但我正在努力获得所需的输出。

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;

标签: sqloracle

解决方案


该解决方案独立于语言和地区:

SELECT date_value,
       date_value - CASE TRUNC(date_value) - TRUNC(date_value, 'IW')
                    WHEN 0 THEN 3 -- Monday
                    WHEN 6 THEN 2 -- Sunday
                    ELSE 1        -- Tuesday to Saturday
                    END AS previous_weekday
FROM   table_name;

其中,对于样本数据:

CREATE TABLE table_name (date_value) AS
SELECT TRUNC(sysdate - LEVEL + 1)
FROM   DUAL
CONNECT BY LEVEL <= 7;

输出(日期格式YYYY-MM-DD HH24:MI:SS (DY)):

DATE_VALUE PREVIOUS_WEEKDAY
2021-07-20 00:00:00 (星期二) 2021-07-19 00:00:00 (周一)
2021-07-19 00:00:00 (周一) 2021-07-16 00:00:00 (周五)
2021-07-18 00:00:00 (周日) 2021-07-16 00:00:00 (周五)
2021-07-17 00:00:00 (周六) 2021-07-16 00:00:00 (周五)
2021-07-16 00:00:00 (周五) 2021-07-15 00:00:00 (星期四)
2021-07-15 00:00:00 (星期四) 2021-07-14 00:00:00 (周三)
2021-07-14 00:00:00 (周三) 2021-07-13 00:00:00 (星期二)

db<>在这里摆弄


推荐阅读