oracle根據四位年周取當周周一的日期函數


create or replace function FUNC_GET_DATE_BY_WEEK
(
theYearWeek IN VARCHAR2
)
return date is
normalDate date;
--根據四位年周獲取當周一的日期

errorMsg VARCHAR2(500);
strLength number;
yearFirstDay date;
daySeqInWeek number;
firstDayInFirstWeek date;
strWeek number;

begin
errorMsg:= '';
SELECT LENGTH(theYearWeek) INTO strLength FROM DUAL;
IF strLength = 4 THEN
--獲取當年第一天
SELECT TO_DATE(SUBSTR(theYearWeek,0,2)||'0101','YYMMDD') INTO yearFirstDay FROM DUAL;
ELSE
errorMsg:='輸入格式不正確,無法轉換';
SELECT TRUNC(SYSDATE) INTO normalDate FROM DUAL;
RETURN normalDate;
END IF;
--------------------------------------
---獲取當年第一天所在周周一的日期
--------------------------------------
--獲取當年第一天是所在周的第幾天
SELECT SUBSTR(TO_CHAR(yearFirstDay,'IWD'),LENGTH(TO_CHAR(yearFirstDay,'IWD')),1) INTO daySeqInWeek FROM DUAL;
IF daySeqInWeek = 1 THEN
--因為oracle周從周日算起,所以如果是周的第一天要加一才是周一的日期
SELECT yearFirstDay + 1 INTO firstDayInFirstWeek FROM DUAL;
ELSE
--非第一天則減
SELECT yearFirstDay - (daySeqInWeek - 2) INTO firstDayInFirstWeek FROM DUAL;
END IF;
SELECT SUBSTR(theYearWeek,3,2) INTO strWeek FROM DUAL;
--當年第一天所在周周一的日期加上周數即是所求
SELECT firstDayInFirstWeek + 7 * (strWeek - 1) INTO normalDate FROM DUAL;
return(normalDate);
end;

參考:https://www.2cto.com/database/201401/269429.html(oracle周相關概念)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM