SELECT оператор фильтрации по времени суток - PullRequest
4 голосов
/ 23 марта 2012

Таблица A, столбцы OrderId, OrderTimeStamp (datetime).

Я хочу ВЫБРАТЬ все записи для любой даты, но между 10 и 13 часами, например.

Как мнесделать это?

Спасибо!

Ответы [ 4 ]

19 голосов
/ 23 марта 2012
declare @t table(d datetime)

insert @t values('2012-01-01 09:00'),('2012-01-01 10:00'),('2012-01-01 11:00')

select cast(d as time) from @t where  cast(d as time) between '10:00' and '13:00'
4 голосов
/ 23 марта 2012

В T-SQL DatePart сделает свое дело:

Чтобы получить все записи от 10:00 - 12:59:

SELECT *
  FROM TableA
  WHERE DATEPART(hh, [OrderTimeStamp]) >= 10 AND DATEPART(hh, [OrderTimeStamp]) < 13

Или, если вы хотите получить все записи из 10:00 - 13:00 (секунды / миллисекунды опущены):

SELECT *
  FROM TableA
  WHERE DATEPART(hh, [OrderTimeStamp]) >= 10 AND DATEPART(hh, [OrderTimeStamp]) < 13
  OR (DATEPART(hh, [OrderTimeStamp]) = 13 AND DATEPART(mi, [OrderTimeStamp]) = 0)

Имейте в виду, что 24-часовые значения возвращаются из функции DatePart при использовании с hh в качестве формата.

Подробнее см. Здесь:
http://msdn.microsoft.com/en-us/library/ms174420.aspx

ОБНОВЛЕНИЕ

Поскольку вы работаете с SQL 2008, вы можете использовать тип данных TIME и значительно упростить ваш запрос (а также исправить):

SELECT *
  FROM TableA
  WHERE CONVERT(TIME(7), [OrderTimeStamp ]) >= '10:00:00.0000000' 
  AND CONVERT(TIME(7), [OrderTimeStamp ]) <= '13:00:00.0000000'

Более подробную информацию см. Здесь:
http://msdn.microsoft.com/en-us/library/bb677243.aspx

2 голосов
/ 23 марта 2012
select * 
from tableA
where datepart(hh, OrderTimeStamp) between 10 and 13

если вам нужно отфильтровать по минутам (например, 13:20 и 14:15), попробуйте предложения по этой ссылке

2 голосов
/ 23 марта 2012
select *
from TableA
where datepart(hh, OrderTimeStamp) >= 10 and datepart(hh, OrderTimeStamp) < 13

Обновление:

Дох, Нциолис побил меня на 30 секунд. Стоит отметить одну вещь: если вы хотите, чтобы 1 вечера был включен, обязательно сделайте последнюю часть где <=. если вы хотите идти только до 12: 59,999 вечера <подходит. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...