MySQL根據年份的週數獲取該周起始時間

概述

做項目中,碰到了個難題:想要根據年份和第幾周獲取該周的週一和週日的時間。找了下MySQL中的日期函數,發現沒有。既然沒有輪子用,那我們自己造個輪子。

根據年份和週數獲取該周第一天的日期

-- 自定義函數
delimiter //
drop function if exists FUN_GET_FIRSTDATE_OF_WEEK;
create function FUN_GET_FIRSTDATE_OF_WEEK(years int,weeks int) returns varchar(32)
begin
	declare days int default 0;
	if weeks = 1 then
		return concat(years,'-01-01');
	elseif weeks >1 then
		select dayofweek(concat(years,'-01-01'))-2 into days;
		return makedate(years,weeks*7-days-6);
	else
		return null;
	end if ;
end//
delimiter ;

-- 函數調用
select FUN_GET_FIRSTDATE_OF_WEEK(2019,8)

注意:第一週的第一天存在跨年的問題,一般都是取1月1號

根據年份和週數獲取該周最後一天的日期

-- 自定義函數
delimiter //
drop function if exists FUN_GET_LASTDATE_OF_WEEK;
create function FUN_GET_LASTDATE_OF_WEEK(years int,weeks int) returns varchar(32)
begin
	declare days int default 0;
	if weeks * 7 >= 365 then 
		return concat(years,'-12-31');
	elseif weeks *7 < 365 and weeks *7 >0 then
		select dayofweek(concat(years,'-01-01'))-2 into days;
		return makedate(years,weeks*7-days);
	else
		return null;
	end if;	
end//
delimiter ;

-- 函數調用
select FUN_GET_LASTDATE_OF_WEEK(2020,1)

注意:年份的最後一週不一定是週日,直接取12月31號即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章