sql - 如何减去“Sysdate”的日期范围
问题描述
我有一个称为“昨天的任务”的查询,并检查今天是否是星期一。如果是星期一,它会给我上周五的任务,如果不是,前一天的任务。由于我们也开始在周末工作,如果是星期一,我希望它会给我星期五、星期六和星期日的任务。这是我当前的代码:
select
to_char(sysdate -0.25,'DAY') day,
t.task_id,
NVL (pu.part_id, 'NONE') part_id,
t.request_id,
(select(concat(concat (p.first_name, ' '), p.last_name)) from person p where t.person_id = p.person_id) name,
pu.quantity,
to_number(pu.user_def15, '9999999.99') lunch,
to_char(cast(t.actual_start_dttm as timestamp) at time zone 'US/Eastern', 'HH24:MI') started,
to_char(cast(t.actual_end_dttm as timestamp) at time zone 'US/Eastern', 'HH24:MI') ended,
NVL(pu.user_def2, 'MISSING') description,
case when NVL(pu.user_def2, 'MISSING') = 'MISSING' then '#FF0000' else '#000000' end description_c,
t.task_status,
to_char(t.plan_start_dttm, 'YYYY-MM-DD') start_date,
to_char (sysdate-0.25,'DD-MM-YYYY HH24:MI') today
from task t
LEFT JOIN part_usage pu ON t.task_id = pu.task_id
where t.access_group = 'CAPCA'
and NVL(pu.part_id, 'NONE') IN ('030X001', '030A01','NONE')
and to_char(t.plan_start_dttm, 'YYYY-MM-DD') =
CASE WHEN
to_char(sysdate - 0.25,'DAY') = 'MÅNDAG '
THEN
to_char (sysdate-3.25, 'YYYY-MM-DD')
ELSE
to_char (sysdate-1.25, 'YYYY-MM-DD')
END
order by name
所以我想将“THEN”修改为 sysdate-3.25、2.25 和 1.25。
谢谢
解决方案
我建议使用CASE .. WHEN
如下:
替换查询的这一部分:
and to_char(t.plan_start_dttm, 'YYYY-MM-DD') =
CASE WHEN
to_char(sysdate - 0.25,'DAY') = 'MÅNDAG '
THEN
to_char (sysdate-3.25, 'YYYY-MM-DD')
ELSE
to_char (sysdate-1.25, 'YYYY-MM-DD')
END
具有以下内容:
CASE
WHEN TO_CHAR(SYSDATE - 0.25, 'DAY') = 'MÅNDAG ' THEN
CASE
WHEN TRUNC(T.PLAN_START_DTTM) BETWEEN TRUNC(SYSDATE - 3.25) AND TRUNC(SYSDATE - 0.25) THEN 1
END
ELSE
CASE
WHEN TRUNC(T.PLAN_START_DTTM) = TRUNC(SYSDATE - 0.25) THEN 1
END
END = 1
干杯!!
推荐阅读
- android - Ionic Cordova Build prod:找不到模块“。” - 打字稿版本>3
- javascript - 输入字段未更新。具有功能组件子的父类
- python - 尝试实现类似 3d 自动编码器的算法,将图像映射到视频但输出尺寸不匹配
- nginx - 处理特定url时Nginx响应错误404
- python - 如果它由python中的非英语单词组成,如何删除整个字符串
- llvm - llvm:为什么adce比dce更具侵略性
- python - 从多个子列表中删除了多个项目
- reactjs - React Hooks useCallback & memo list re-rendering
- c++ - 最小内存使用量的字符串解压缩 C++
- mysql - 所有形式的 VB.NET 连接