gpt4 book ai didi

sql - 在没有循环的情况下计算两个日期之间一周中的每一天

转载 作者:行者123 更新时间:2023-12-04 22:25:02 26 4
gpt4 key购买 nike

我可以用循环来做,但如果很多天很慢。所以我需要没有循环。这是我的代码:

     DECLARE
@FRDT date = '01-SEP-2019'
,@TODT date = '30-SEP-2019'
,@N int

,@SUN int = 0
,@MON int = 0
,@TUE int = 0
,@WED int = 0
,@THU int = 0
,@FRI int = 0
,@SAT int = 0

WHILE @FRDT <= @TODT
BEGIN
SET @N = DATEPART(WEEKDAY, @FRDT)
IF @N = 1
SET @SUN = @SUN + 1
ELSE IF @N = 2
SET @MON = @MON + 1
ELSE IF @N = 3
SET @TUE = @TUE + 1
ELSE IF @N = 4
SET @WED = @WED + 1
ELSE IF @N = 5
SET @THU = @THU + 1
ELSE IF @N = 6
SET @FRI = @FRI + 1
ELSE IF @N = 7
SET @SAT = @SAT + 1

SET @FRDT = DATEADD(DAY, 1, @FRDT)
END

SELECT 1 AS [NO], 'Sunday' AS [DAYNAME], @SUN AS [NUMBEROFDAY]
UNION SELECT 2, 'Monday', @MON
UNION SELECT 3, 'Tuesday', @TUE
UNION SELECT 4, 'Wednesday', @WED
UNION SELECT 5, 'Thursday', @THU
UNION SELECT 6, 'Friday', @FRI

enter image description here

我想要像上面的代码一样的结果,但不使用循环以获得更好的性能。

最佳答案

日期范围是 30 天,除以 7 得到商 4 余数 2。

所以一周中的每一天都得到 4,两天需要额外的一天。这些是对应于 @start_date 和本例中的第二天。

实现此方法的 SQL 如下 ( demo )

SELECT DATENAME(WEEKDAY,base_date),
quotient + IIF(Nums.N < remainder, 1, 0)
FROM (VALUES
(0),
(1),
(2),
(3),
(4),
(5),
(6)) Nums(N)
CROSS APPLY(SELECT 1 + DATEDIFF(DAY,@start_date,@end_date)) DC(day_count)
CROSS APPLY(SELECT DATEADD(DAY, Nums.N, @start_date), day_count/7, day_count% 7) D(base_date, quotient, remainder)
ORDER BY DATEPART(DW,base_date)

关于sql - 在没有循环的情况下计算两个日期之间一周中的每一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com