В 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