我有一个包含开始和结束日期的表。我想输出一个范围内的所有记录。时间范围是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] --End is a reserved keyword, it should not be used for object/column names
FROM dbo.tbl
WHERE [End] >= @StartDay --End is a reserved keyword, it should not be used for object/column names
AND Start <= @LastDay;
不要忘记将列名称end
用双引号括起来,以声明它不是用作关键字。
试试这个
DECLARE @start_date DATE = '2023-03-30';
DECLARE @end_date DATE = '2023-04-15';
SELECT *
FROM tab
WHERE "End" >= @start_date
AND Start <= @end_Date;
,
db<的在小提琴