gpt4 book ai didi

c# - SQL Server 使用表中的一些数据生成数据

转载 作者:行者123 更新时间:2023-11-30 16:45:17 26 4
gpt4 key购买 nike

假设我们在 SQL Server 中有一个存储医生轮类的表,那么我们使用工作日而不是存储明确的日期,该表看起来像这样

ShiftId  Day    DoctorId    FromTime      ToTime
--------------------------------------------------
1 SUN 1 08:00:00 16:00:00
2 MON 1 09:00:00.00 14:00:00
3 TUE 1 09:00:00.00 15:00:00
4 WED 1 10:00:00.00 17:00:00
5 THU 1 13:00:00.00 18:00:00

我想创建一个 select 语句来使用存储在该表中的数据生成明确的日期

示例

假设我想生成 2017 年 2 月 19 日星期日2017 年 2 月 28 日星期二 之间的日期,输出应该是这样的

DoctorId    Date                Day     FromTime    ToTime
------------------------------------------------------------
1 '02-19-2017' SUN 08:00:00 16:00:00
1 '02-20-2017' MON 09:00:00 14:00:00
1 '02-21-2017' TUE 09:00:00 15:00:00
1 '02-22-2017' WED 10:00:00 17:00:00
1 '02-23-2017' THU 13:00:00 18:00:00
1 '02-26-2017' SUN 08:00:00 16:00:00
1 '02-27-2017' MON 09:00:00 14:00:00
1 '02-28-2017' TUE 09:00:00 15:00:00

解释

为这些日期生成的时间对应于我们表中存储的天数,例如第一行为 '02-19-2017' 生成的时间为 08:00:00 16:00:00 因为'02-19-2017'是星期天,而生成的时间为'02-20-2017' 第二行是 09:00:00 14:00:00 因为 '02-20-2017' 是星期一,依此类推。

您可能会注意到没有为 24th February FRI25th February SAT 生成日期,因为我们不存储 Frid​​ay星期六 在我们的表中

我们可以在 T-SQL 中编写返回此结果的查询吗?

最佳答案

我会使用您的 From/To 输入参数在递归 CTE 中动态生成日历,然后根据工作日值将其加入您的类次表。

DECLARE @Shift TABLE (ShiftID INT, [Day] VARCHAR(3), DoctorId INT, FromTime TIME, ToTime TIME)
INSERT INTO @Shift
VALUES (1,'SUN',1,'08:00:00','16:00:00'),
(2,'MON',1,'09:00:00.00','14:00:00'),
(3,'TUE',1,'09:00:00.00','15:00:00'),
(4,'WED',1,'10:00:00.00','17:00:00'),
(5,'THU',1,'13:00:00.00','18:00:00')

DECLARE @D1 DATE, @D2 DATE
SET @D1 = '2017-02-19'
SET @D2 = '2017-02-28'

;WITH Calendar AS
(
SELECT @D1 AS [DateVal], LEFT(DATENAME(WEEKDAY,@D1),3) AS [DWName]
UNION ALL
SELECT DATEADD(DAY,1,DateVal), LEFT(DATENAME(WEEKDAY,DATEADD(DAY,1,DateVal)),3)
FROM Calendar
WHERE DateVal<@D2
)


SELECT S.DoctorId, C.DateVal, S.[Day], S.FromTime, S.ToTime
FROM @Shift S
JOIN Calendar C ON S.[Day]=C.DWName

关于c# - SQL Server 使用表中的一些数据生成数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42443324/

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