SQL Server:获取日期和时间范围的行

Posted

技术标签:

【中文标题】SQL Server:获取日期和时间范围的行【英文标题】:SQL Server : get rows for date and time range 【发布时间】:2019-09-30 14:40:25 【问题描述】:

我有这张桌子:

CREATE TABLE [dbo].[#TABLE_1]
(
    [numreq] [INT] NULL,
    [rangetime] [NVARCHAR](300) NULL
) ON [PRIMARY]

INSERT INTO [dbo].[#TABLE_1] 
VALUES ('2', '2019-09-27 07:30:00.000'),
       ('3', '2019-09-27 21:30:00.000'),
       ('4', '2019-09-28 09:30:00.000'),
       ('5', '2019-09-28 21:30:00.000'),
       ('6', '2019-09-29 09:30:00.000'),
       ('7', '2019-09-29 21:30:00.000'),
       ('8', '2019-09-30 07:30:00.000'),
       ('9', '2019-09-30 10:00:00.000'),
       ('9', '2019-09-30 11:00:00.000'),
       ('9', '2019-10-01 10:00:00.000')

我想选择 09:00 之前 09:00 的时间跨度中的行。如果今天是 10 月 1 日星期二,那么我想要从 28.09.2019 09:0001.10.2019 09:00 的所有内容。

我使用了下面的查询,但没有得到所需的结果。

select *
from [dbo].[#TABLE_1]
where (((DATEPART(DW,getdate())) = 2 AND (CAST (rangetime as DATE))  >= (CAST(DATEADD(hh,-7,getdate())-3 as DATE)) and (CAST(rangetime as TIME)>='09:00:00')))
order by rangetime desc

如何解决?

【问题讨论】:

“我想在 09:00 之前选择 09:00 的时间跨度内的行” 嗯?一个时间怎么可能包含09:00却是before呢?最早之前 09:0008:59:59.9999999,它不“包括”09:00。您对以上内容的预期结果是什么? 另外,如果没有人通知您,2008 现在完全不支持了。因此,建议您尽快查看升级路径。 什么是“09:00 之前的 09:00”? 这些值是什么,@JohTravell?他们的意思是什么?他们应该在您的问题中吗? “不支持”不包括在内。 “生命的终结”是更好的术语。这意味着 Sql Server 2008 不再获得 任何 补丁......甚至没有关键的安全更新。继续使用这个平台是危险和不负责任的。 【参考方案1】:

按照您的问题的表述方式,您似乎想要从昨天 09:00今天 09:00 的行。应该是这样的:

SELECT * FROM [#TABLE_1]
WHERE [rangetime] between DATEADD(hour,-15,DATEDIFF(d,0,GETDATE())) and  DATEADD(hour,9,DATEDIFF(d,0,GETDATE()))

输出

6 2019-09-29 09:30:00.000 
7 2019-09-29 21:30:00.000 
8 2019-09-30 07:30:00.000 

但是你写了

从 28.09.2019 09:00 到 01.10.2019 09:00 的所有时间。

这对我来说有点难以理解......也许你想要从 今天前三天 09:00今天 09:00 的行? 3天还是72小时?

SELECT * FROM [#TABLE_1]
WHERE [rangetime] between DATEADD(hour,-63,DATEDIFF(d,0,GETDATE())) and  DATEADD(hour,9,DATEDIFF(d,0,GETDATE()))

输出

3 2019-09-27 21:30:00.000 
4 2019-09-28 09:30:00.000 
5 2019-09-28 21:30:00.000 
6 2019-09-29 09:30:00.000 
7 2019-09-29 21:30:00.000 
8 2019-09-30 07:30:00.000 

【讨论】:

以上是关于SQL Server:获取日期和时间范围的行的主要内容,如果未能解决你的问题,请参考以下文章

记录之间的 SQL Server 日期时间范围

SQL Server 在日期范围内聚合

Microsoft SQL Server 2016,T-SQL:根据各个日期获取数据集的日期范围

SQL Server 查找接近服务日期和月份的行

sql server 日期范围查询

Linq to SQL 选择 DateTime 字段在任何日期范围列表中的行