我有一張只有星期天日期的桌子:
dbo.日歷:
[DatesInCalendar] (日期時間 (yyyy-MM-dd))
2022-06-19
2022-06-26
...
現在我想將值生成到另一個表中,在其中添加可預訂的時間段:
dbo.BookableTimeSlots
[時隙] (日期時間 (yyyy-MM-dd hh:mi:ss)) | [預訂] (位) | [預訂者] (NvarChar(10))
所以 [TimeSlots] 中的每個值都應該基于 [DatesInCalendar] 中的每個值:
2022-06-19 10:00:00
2022-06-19 10:30:00
...
2022-06-19 16:00:00
我使用以下查詢創建了我的日歷表,但我無法為我的第二個表 BookableTimeSlots 修改它。
USE [MyDatabase]
GO
declare @startDate date,@enddate date
set @startDate='2022-06-01'
set @enddate='2025-06-01'
while @startDate<=@enddate
begin
if(DATENAME(dw,@startDate)='Sunday')
INSERT INTO [dbo].[Calendar]
([DatesInCalendar])
VALUES
(convert(date,@startDate,103))
set @startDate=DATEADD(DD,1,@startDate)
end
GO
有沒有人建議我如何根據我的第一個表中的日期填充我的第二個表并添加一個間隔為 30 分鐘(上午 10 點到下午 4 點)的時間戳?
[預訂] = 0
[預訂者] = 空
uj5u.com熱心網友回復:
創建一個表,或使用派生表或 cte,在一天內每個所需時間段有 1 行。將這些行交叉連接到您的日歷表,并使用 dateadd 來適應,該查詢將生成所有需要的時間段行,這些行可以插入到您的目標表中。例如
with cte (mysunday) as (
select cast('20220605' as date) as mysunday
union all
select dateadd(day,7,cte.mysunday)
from cte
where cte.mysunday < '20220731'
)
, tally as (
select digit from ( values(1),(2),(3),(4),(5),(6),(7),(8) ) d (digit)
)
select
mysunday, dateadd(hour,tally.digit,cast(cte.mysunday as datetime)) as slot, tally.digit
from cte
cross join tally
星期天 | 插槽 | 數字 :--------- | :------------------------ | ----: 2022-06-05 | 2022-06-05 01:00:00.000 | 1 2022-06-05 | 2022-06-05 02:00:00.000 | 2 2022-06-05 | 2022-06-05 03:00:00.000 | 3 2022-06-05 | 2022-06-05 04:00:00.000 | 4 2022-06-05 | 2022-06-05 05:00:00.000 | 5 2022-06-05 | 2022-06-05 06:00:00.000 | 6 2022-06-05 | 2022-06-05 07:00:00.000 | 7 2022-06-05 | 2022-06-05 08:00:00.000 | 8 2022-06-12 | 2022-06-12 01:00:00.000 | 1 2022-06-12 | 2022-06-12 02:00:00.000 | 2 2022-06-12 | 2022-06-12 03:00:00.000 | 3 2022-06-12 | 2022-06-12 04:00:00.000 | 4 2022-06-12 | 2022-06-12 05:00:00.000 | 5 2022-06-12 | 2022-06-12 06:00:00.000 | 6 2022-06-12 | 2022-06-12 07:00:00.000 | 7 2022-06-12 | 2022-06-12 08:00:00.000 | 8 等等
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493667.html
下一篇:連接列根據條件分布在多行中
