Часы запросов Microsoft SQL в метке времени - PullRequest
3 голосов
/ 03 мая 2011

Я ищу запрос к таблице, содержащей метки времени (например, 2011-05-03 09:52:00).

Необходимо запросить всю таблицу и найти временные метки, которые были введены между 18:00:00 и 20:00:00 любого дня, любого месяца и любого года.

Каков наилучший подход?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 03 мая 2011
SELECT *
    FROM YourTable
    WHERE DATEPART(hh, YourColumn) BETWEEN 18 AND 20
3 голосов
/ 03 мая 2011

Этот получит только метки времени между 18 и 20, включая 18:00:00 и 20:00: 00


SELECT *     
FROM YourTable     
WHERE CONVERT(varchar(8), YourDateColumn, 108)  between '18:00:00' and '20:00:00'  

2 голосов
/ 04 мая 2011

Для SQL Server 2008 (что ОП пометил как вопрос) очевидный способ прост:

select *
from someTable t
where convert(time,t.dtColumn) between '18:00' and '20:00'

для любой версии SQL Server будет работать следующее

select *
from someTable t
where t.dtColumn between dateadd(hour,18,convert(datetime,convert(varchar,t.dtColumn,112),112))
                     and dateadd(hour,20,convert(datetime,convert(varchar,t.dtColumn,112),112))

Between является инклюзивным тестом WRT как для нижней, так и для верхней границ тестируемого диапазона.Чтобы сделать тест эксклюзивным WRT для одной или другой границы, вам понадобится что-то вроде следующего:

select *
from someTable t
where convert(time,t.dtColumn) >= '18:00'
  and convert(time,t.dtColumn) <  '20:00'

или

select *
from someTable t
where t.dtColumn >= dateadd(hour,18,convert(datetime,convert(varchar,t.dtColumn,112),112))
  and t.dtColumn <  dateadd(hour,20,convert(datetime,convert(varchar,t.dtColumn,112),112))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...