如何减去“ Sysdate”的日期范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何减去“ 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。

谢谢

答案

这是您要寻找的吗?

sydate - case to_char(sysdate - 0.25, 'D') = '1' then 3.25 else 0.25 end

以上是关于如何减去“ Sysdate”的日期范围的主要内容,如果未能解决你的问题,请参考以下文章

从 Redshift 中的 sysdate 减去 5 小时

日期 sysdate 范围与文字日期范围之间的 Oracle

SQL语句如何判断一个日期在两个日期之间

从其他日期时间范围(T-SQL)中减去日期时间范围

PL/SQL 创建一个根据日期范围检查 SYSDATE 的触发器

从甲骨文日期中减去年份的简单技术