MS SQL数据库关于时间循环如何处理跨天问题
发布网友
发布时间:2023-05-19 08:59
我来回答
共2个回答
热心网友
时间:2024-11-14 22:01
--sql2005+,CTE表达式,不过看上去比while复杂
--建表
create table T
(
设备 varchar(10),
开始时间 datetime,
结束时间 datetime
)
--插入数控
insert into t values('A','2015-08-01 17:06:49', '2015-08-02 03:41:32')
insert into t values('B','2015-08-01 20:54:42', '2015-08-03 23:59:59')
With CT
As
(
Select 设备,开始时间,结束时间
From T
Union all
Select 设备,DATEADD(DAY,1,开始时间),结束时间 From ct
Where DATEADD(DAY,1,开始时间)<DATEADD(DAY,1,结束时间)
)
Select 设备,开始时间,结束时间,DATEDIFF(MI,开始时间,结束时间)+
Case When id>1 Then 1 Else 0 End As 分钟
From
(
Select id,设备,
Case When id>1 Then Convert(Datetime,Convert(Varchar(8),开始时间,112))
Else 开始时间 End As 开始时间,
Case When id=cnt Then 结束时间
Else Convert(Datetime,Convert(Varchar(8),开始时间,112)+' 23:59:59') End As 结束时间
From
(
Select *,ROW_NUMBER() Over(Partition By 设备 Order by 开始时间) As id,
COUNT(*) Over(PARTITION by 设备) As cnt
From CT
Where Convert(Varchar(8),开始时间,112)<=Convert(Varchar(8),结束时间,112)
) N
) M
热心网友
时间:2024-11-14 22:01
不用游标处理不了吧。追问我已经用while搞定了