gpt4 book ai didi

sql - 用 Select 查询替换 While 循环

转载 作者:行者123 更新时间:2023-12-01 15:55:57 27 4
gpt4 key购买 nike

我在 SQL Server 2008 中有以下 SQL 语句

DECLARE @Interval table(StartInterval DATETIME,
EndInterval DATETIME )


WHILE (DATEADD(mi,1440,@STARTDATE) <= @ENDDATE)
BEGIN
INSERT INTO @Interval
SELECT @STARTDATE, DATEADD(mi,1440,@STARTDATE)

SET @STARTDATE = DATEADD(mi,1440,@STARTDATE)
END

@StartDate 和@EndDate 是两个参数。我正在使用 while 循环填充一个表变量,并在我的存储过程中进一步使用该表变量以与其他表连接。但我想避免使用临时表或表变量。有什么方法可以在没有任何迭代或循环的情况下使用选择查询获得相同的结果(通过 while 循环实现)?所以我可以做类似的事情

Select * from (logic that replace while loop) Result inner join some table on col1=col2

想要的结果

 StartInterval          EndInterval
2013-10-25 00:00:00.000 2013-10-26 00:00:00.000
2013-10-26 00:00:00.000 2013-10-27 00:00:00.000
2013-10-27 00:00:00.000 2013-10-28 00:00:00.000

最佳答案

请尝试使用 CTE:

declare @StartInterval datetime, @EndInterval   datetime
select @StartInterval='01-June-2013', @EndInterval =GETDATE();

with T as (
select
@StartInterval as StartInterval,
DATEADD(mi, 1440, @StartInterval) EndInterval
union all
SELECT
EndInterval, DATEADD(mi,1440,EndInterval)
FROM T
WHERE
EndInterval <= @EndInterval
)select * from T
OPTION (MaxRecursion 0);

select StartInterval, DATEADD(mi, 1440, StartInterval) EndInterval
from(
select DATEADD(mi, (ROW_NUMBER() OVER (ORDER BY OBJECT_ID)-1)*1440, @StartInterval) StartInterval
FROM master.sys.all_columns
)x where StartInterval <=@EndInterval

关于sql - 用 Select 查询替换 While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700524/

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