SQL Server: получить строки для диапазона дат и времени - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть эта таблица:

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. Если сегодня вторник, 1 октября, то я хочу все от 28.09.2019 09:00 до 01.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

Как исправитьэто?

1 Ответ

0 голосов
/ 30 сентября 2019

То, как был задан ваш вопрос, казалось, что вы хотели строки с вчера 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()))

output :

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 
...