SqlSever 星期日期(获取日期范围内的星期日期)(有BUG,修复中)

--需求:1.历史日期不显示,今天算历史。
--需求;2.开始日期不超期,未来可超期。

SET DATEFIRST 1 
DECLARE @XQ   INT          SET @XQ   = 4
DECLARE @KSRQ VARCHAR(50) SET @KSRQ = '2020-05-29'
DECLARE @JSRQ VARCHAR(50) SET @JSRQ = '2020-06-24'

--开始日期:传参
DECLARE @KSRQ_1 DATETIME SET @KSRQ_1 = CONVERT(DATETIME,@KSRQ)
--开始日期:星期
DECLARE @KSRQ_2 DATETIME SET @KSRQ_2 = DATEADD(DAY,@XQ - DATEPART(WEEKDAY,@KSRQ_1),@KSRQ_1)

--结束日期:日期
DECLARE @JSRQ_1 DATETIME SET @JSRQ_1 = CONVERT(DATETIME,@JSRQ)
--结束日期:星期
DECLARE @JSRQ_2 DATETIME SET @JSRQ_2 = DATEADD(DAY,@XQ - DATEPART(WEEKDAY,@JSRQ_1),@JSRQ_1)

--当天日期:系统
DECLARE @TODAY  DATETIME SET @TODAY  = CONVERT(DATETIME,CONVERT(VARCHAR(8),GETDATE(),112))

IF(@KSRQ_1 > @JSRQ_1)
BEGIN
    --错误:开始日期 > 结束日期
    RETURN
END

IF(@TODAY >= @JSRQ_2)
BEGIN
    --错误:系统日期 >= 结束日期(星期)
    RETURN 
END

IF(@TODAY >= @KSRQ_2 OR @KSRQ_1 >= @KSRQ_2)
BEGIN
    --变更:系统日期 >= 开始日期(星期)
    --变更:开始日期 >= 开始日期(星期)
    SET @KSRQ_2 = DATEADD(DAY,7,@KSRQ_2)
END

WHILE(@KSRQ_2 <= @JSRQ_2)
BEGIN 
    SELECT @KSRQ_2
    SET @KSRQ_2 = DATEADD(DAY,7,@KSRQ_2)
END

猜你喜欢

转载自www.cnblogs.com/ltcsys/p/12972188.html