bug什么的不可能,没有的,肯定不是
一次功能处理时,发现还没用过当只有星期数的时候去确定在某段日期内的具体日期的,平常都是根据日期去找星期数,反过来的引起了我的兴趣,研究了一下,还是参考了博客的一位博主的解决方案,删减了下,
比如:当你想知道在2021-11-11 到2021-11-23日之间星期一是哪天,或者有多少个星期二,这个时候就来学习学习吧:
1 ---方法:获取指定范围日期的星期所在日期
3 CREATE FUNCTION [dbo].[My_OneWeek_GetDate](@KSRQ DATETIME,@JSRQ DATETIME,@XQ int)
4 RETURNS @tmpTable TABLE(resultDay DATETIME)
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'
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)
22 --当天日期:系统
23 --DECLARE @TODAY DATETIME SET @TODAY = CONVERT(DATETIME,CONVERT(VARCHAR(8),GETDATE(),112))
25 IF(@KSRQ_1 > @JSRQ_1)
26 BEGIN
27 --错误:开始日期 > 结束日期
28 RETURN
29 END
32 WHILE(@KSRQ_2 <= @JSRQ_2)
33 BEGIN
35 SET @KSRQ_2 = DATEADD(DAY,7,@KSRQ_2)
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了什么的)
然后就会看到它的结果: