1. 程式人生 > 其它 >SqlServer 查詢星期數所在日期範圍的日期值

SqlServer 查詢星期數所在日期範圍的日期值

bug什麼的不可能,沒有的,肯定不是

一次功能處理時,發現還沒用過當只有星期數的時候去確定在某段日期內的具體日期的,平常都是根據日期去找星期數,反過來的引起了我的興趣,研究了一下,還是參考了部落格的一位博主的解決方案,刪減了下,

比如:當你想知道在2021-11-11 到2021-11-23日之間星期一是哪天,或者有多少個星期二,這個時候就來學習學習吧:

 1 ---方法:獲取指定範圍日期的星期所在日期
 2 
 3 CREATE FUNCTION [dbo].[My_OneWeek_GetDate](@KSRQ DATETIME,@JSRQ DATETIME,@XQ int) 
 4 RETURNS @tmpTable TABLE
(resultDay DATETIME) 5 AS 6 BEGIN 7 --SET DATEFIRST 1 8 --{This is:國內一般認為每週的第一天為週一,某國一般設週一為星期天} 9 --DECLARE @XQ INT SET @XQ = 1 --星期數 10 --DECLARE @KSRQ VARCHAR(50) SET @KSRQ = '2021-11-20' 11 --DECLARE @JSRQ VARCHAR(50) SET @JSRQ = '2021-11-23' 12 13 --開始日期:傳參 14 DECLARE
@KSRQ_1 DATETIME SET @KSRQ_1 = CONVERT(DATETIME,@KSRQ) 15 --開始日期:星期 16 DECLARE @KSRQ_2 DATETIME SET @KSRQ_2 = DATEADD(DAY,@XQ - DATEPART(WEEKDAY,@KSRQ_1),@KSRQ_1) 17 --結束日期:日期 18 DECLARE @JSRQ_1 DATETIME SET @JSRQ_1 = CONVERT(DATETIME,@JSRQ) 19 --結束日期:星期 20 DECLARE @JSRQ_2 DATETIME SET @JSRQ_2 = DATEADD
(DAY,@XQ - DATEPART(WEEKDAY,@JSRQ_1),@JSRQ_1) 21 22 --當天日期:系統 23 --DECLARE @TODAY DATETIME SET @TODAY = CONVERT(DATETIME,CONVERT(VARCHAR(8),GETDATE(),112)) 24 25 IF(@KSRQ_1 > @JSRQ_1) 26 BEGIN 27 --錯誤:開始日期 > 結束日期 28 RETURN 29 END 30 31 32 WHILE(@KSRQ_2 <= @JSRQ_2) 33 BEGIN 34 35 SET @KSRQ_2 = DATEADD(DAY,7,@KSRQ_2) 36 37 if(@KSRQ_2>@KSRQ_1 and @KSRQ_2<@JSRQ_1) 38 begin 39 --SELECT @KSRQ_2 40 insert into @tmpTable values(@KSRQ_2) 41 end 42 END 43 return 44 End 45 go

這裡運用的方法,以便其他語句呼叫,值得注意的是,方法內不能使用執行語句,update/insert/delete/會提示錯誤,至於為什麼把

SET DATEFIRST 1也註釋掉,你可以親自試試,建議這個要寫到方法外部,那麼,

呼叫
select * from [dbo].[My_OneWeek_GetDate]('2021-11-20','2021-11-24',1)

傳入開始日期,結束日期,以及星期數(星期三就是3,週二就是2了什麼的)

然後就會看到它的結果:

ok,

就這樣了,有交流請聯絡wx:EnternityOfStart

哦還有感謝:

https://www.cnblogs.com/ltcsys/p/12972188.html