显示日期范围的开始日期和结束日期



我有一个包含开始和结束日期的表。我想输出一个范围内的所有记录。时间范围是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&lt的在小提琴

最新更新