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;
/
1条答案
按热度按时间omvjsjqw1#
要查找任何给定日期所在周的星期日,可以使用
NEXT_DAY
函数(从日期中减去1,这样,如果已经是星期日,则可以获得当前周的值,而不是下一周的值):其输出:
或者,要独立于NLS日期语言设置执行此操作,可以与ISO周的开始时间进行比较:
其具有相同的输出。
如果只想在星期五设置值,则可以使用
CASE
表达式检查星期几,然后添加2天:或者,独立于NLS设置:
fiddle