gpt4 book ai didi

sql - 从单行sql创建多行

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

我有像这样的表结构

ATM         Ticket Open Time    Ticket Closed Time

M30G324202 17-02-2013 06:15 19-02-2013 20:54
M30G324202 28-02-2013 21:00 01-03-2013 11:18
M30G324203 27-02-2013 19:10 28-02-2013 07:14
M30G324203 28-02-2013 07:15 28-02-2013 11:18

如果门票开放时间或门票关闭时间介于“20:00:00”和“06:00:00”之间,即晚上 8 点和早上 6 点,则应创建没有该时间范围的新行

例如对于上表中的第一行
ATM         Ticket Open Time    Ticket Closed Time

M30G324202 17-02-2013 06:15 17-02-2013 20:00
M30G324202 18-02-2013 06:00 18-02-2013 20:00
M30G324202 19-02-2013 06:00 19-02-2013 20:00

//Above was for Only 1st Row

//Second Row Change AS Follows

M30G324202 01-03-2013 06:00 01-03-2013 11:18
(Time From 28-02-2013 21:00 Will get neglected till next day morning 6 AM
as it is after 8 PM )

//Third Row Change AS Follows

M30G324203 27-02-2013 19:10 27-02-2013 20:00
M30G324203 28-02-2013 06:00 28-02-2013 07:14

//Fourth Row Change AS Follows

M30G324203 28-02-2013 07:15 28-02-2013 11:18 (No Change as it is)

我写了 20:00而不是 20:54因为 54 分钟。 2 月 19 日晚上 8 点之后。

最佳答案

一个很好的问题!
请检查我的尝试:

declare @tbl as table (ATM nvarchar(20), TicketOpenTime datetime, TicketClosedTime datetime)
insert into @tbl values
('M30G324202', '02-17-2013 06:15', '02-19-2013 20:54'),
('M30G324202', '02-28-2013 21:00', '03-01-2013 11:18'),
('M30G324203', '02-27-2013 19:10', '02-28-2013 07:14'),
('M30G324203', '02-28-2013 07:15', '02-28-2013 11:18')

declare @min datetime, @max datetime
select @min = MIN(TicketOpenTime), @max = max(TicketClosedTime) from @tbl

;with T as(
select CONVERT(datetime, convert(numeric(20), @min, 101)) dt
union all
select dt+1 from T where dt<@max
)
select
a.ATM,
case when a.TicketOpenTime>dt1 then a.TicketOpenTime else dt1 end TicketOpenTime,
case when a.TicketClosedTime>dt2 then dt2 else a.TicketClosedTime end TicketClosedTime
From @tbl a
cross apply(
select
dt,
DATEADD(minute, 360, dt) dt1,
DATEADD(minute, 1200, dt) dt2 from T b
where
dt between CAST(a.TicketOpenTime as DATE) and cast(a.TicketClosedTime as DATE)
)x
where a.TicketOpenTime<=x.dt2
order by a.ATM, a. TicketOpenTime

关于sql - 从单行sql创建多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16562615/

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