求 某年某周 的最后一天; 周定义: 每年1月1号 为第一周的开始,周一为周的第一天
CREATE OR REPLACE FUNCTION func_week_lastdate(ye IN NUMBER, we IN NUMBER) RETURN VARCHAR2 IS
first_week_day NUMBER;
sub_days NUMBER;
week_lastdate VARCHAR2(12);
BEGIN
-- 1、取0101 为第一周的星期几 (1为周日)
select to_char(to_date(ye||'-01-01','yyyy-mm-dd'),'d') into first_week_day from dual;
if first_week_day = 1 then
sub_days :=7;
else
sub_days :=first_week_day-1;
end if;
-- 2、0101 + we*7 - sub_days;
select to_char(to_date(ye||'-1-1','yyyy-mm-dd')+(we*7)-sub_days,'yyyy-mm-dd') into week_lastdate from dual;
-- 3、判断是否到下一年
if to_date(week_lastdate,'yyyy-mm-dd') > to_date(ye||'-12-31','yyyy-mm-dd') then
week_lastdate := ye||'-12-31';
end if;
RETURN week_lastdate;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END func_week_lastdate;
求 某年 某月的最后一天日期
select to_char(LAST_DAY(to_date(&ye|| '-' || &mo,'yyyy-mm')),'yyyy-mm-dd') from dual;