sql - 甲骨文获取上个工作日周一至周五
问题描述
我想获得最后一个工作日。如果是周二到周六,那就是前一天。如果是星期天或星期一,那就是星期五。
到目前为止,我已经尝试过了,但我正在努力获得所需的输出。
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;
解决方案
该解决方案独立于语言和地区:
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<>在这里摆弄
推荐阅读
- python - 如何将列表输入到函数中并在 Python 中接收列表?
- javascript - 指示 id 以确认 recatjs 中的操作时弹出错误
- c# - 显式等待不同的形式
- ruby-on-rails - Rails 指定所需的范围
- python - 我需要从python中的列表中提取每个字典吗?
- java - 如何在 Java 中打开 Excel 工作簿并删除所有只有标题行的工作表
- jquery - :active 伪类无法正常工作
- java - 有什么方法可以避免在 java map-struct 中使用原始字符串?
- javascript - 基于昨天在 Firestore 中的“何处”条件?
- python - tkinter 中的 button_press_event(仅左键单击)