如何在oracle中检查给定的日期day

3lxsmp7m  于 2023-03-07  发布在  Oracle
关注(0)|答案(1)|浏览(120)

我需要检查是否给定的日期是星期五或没有。如果是这样,需要修改日期为星期日。
例如,03-FEB-23是星期五,因此需要将bus_date更改为星期日。

define cu_date='03-FEB-23'
expected output bus_dat=05-FEB-23
omvjsjqw

omvjsjqw1#

要查找任何给定日期所在周的星期日,可以使用NEXT_DAY函数(从日期中减去1,这样,如果已经是星期日,则可以获得当前周的值,而不是下一周的值):

DECLARE
  cu_date  DATE := DATE '2023-02-03';
  bus_date DATE := NEXT_DAY(cu_date-1, 'SUNDAY');
BEGIN
  DBMS_OUTPUT.PUT_LINE(bus_date);
END;
/

其输出:

2023-02-05 00:00:00

或者,要独立于NLS日期语言设置执行此操作,可以与ISO周的开始时间进行比较:

DECLARE
  cu_date  DATE := DATE '2023-02-03';
  bus_date DATE := cu_date + 6 - (TRUNC(cu_date) - TRUNC(cu_date, 'IW'));
BEGIN
  DBMS_OUTPUT.PUT_LINE(bus_date);
END;
/

其具有相同的输出。
如果只想在星期五设置值,则可以使用CASE表达式检查星期几,然后添加2天:

DECLARE
  cu_date  DATE := DATE '2023-02-03';
  bus_date DATE := CASE
                   WHEN TO_CHAR(cu_date, 'fmDay', 'NLS_DATE_LANGUAGE=English') = 'Friday'
                   THEN cu_date + 2
                   END;
BEGIN
  DBMS_OUTPUT.PUT_LINE(bus_date);
END;
/

或者,独立于NLS设置:

DECLARE
  cu_date  DATE := DATE '2023-02-03';
  bus_date DATE := CASE
                   WHEN TRUNC(cu_date) - TRUNC(cu_date, 'IW') = 4 -- Friday
                   THEN cu_date + 2
                   END;
BEGIN
  DBMS_OUTPUT.PUT_LINE(bus_date);
END;
/

fiddle

相关问题