我有一张包含开始日期和结束日期的表格。我想输出一个范围内的所有记录。范围将从 2023-03-30 到 2023-04-15。所有在时间窗口内的记录都需要输出,包括开始时间早,结束时间晚的记录。
ID Start End
1 2023-02-01 2023-06-15
2 2023-03-24 2023-04-12
3 2023-04-10 2023-04-20
4 2023-04-01 2023-04-05
5 2023-03-10 2023-03-28
6 2023-04-16 2023-04-20
7 2023-03-31 2023-04-15
8 2023-03-30 2023-04-15
9 2023-04-15 2023-04-20
10 2023-04-16 2023-04-20
SET @startDay = '2023-03-30';
SET @LastDay = '2023-04-15';
SELECT
ID,
Start,
End
From tbl
WHERE (Start <= @startDay AND End >= @LastDay)
OR (Start >= @startDay AND End <= @LastDay)
查询将显示记录 1、2、3、4、7、8、9,但不会显示 5、6、10。 不幸的是不起作用。我将如何更改查询?
如果您需要获取时间段的任何部分出现在您的范围内的行,则需要检查结束日期是否在开始时间之后,开始日期是否在结束日期之前。
SET @StartDay = '2023-03-30';
SET @LastDay = '2023-04-15';
SELECT ID,
Start,
End
FROM dbo.tbl
WHERE End >= @StartDay
AND Start <= @LastDay;