SqlServer教程

SqlServer 查询星期数所在日期范围的日期值

本文主要是介绍SqlServer 查询星期数所在日期范围的日期值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一次功能处理时,发现还没用过当只有星期数的时候去确定在某段日期内的具体日期的,平常都是根据日期去找星期数,反过来的引起了我的兴趣,研究了一下,还是参考了博客的一位博主的解决方案,删减了下,

比如:当你想知道在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

 
这篇关于SqlServer 查询星期数所在日期范围的日期值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!