Что я хотел сделать, это извлечь временную часть типа данных DateTime и сравнить ее. Я нашел способ извлечь часть даты здесь в StackOverflow . Если у меня есть только часть даты, она просто вычитает дату из источника DateTime:
datePortion = DATEADD (день, DATEDIFF (день, 0, sourceDate ), 0)
timePortion = DATEDIFF (миллисекунда, datePortion, sourceDate )
поэтому макрос для извлечения части времени в SQL Server 2005:
f (x) = DATEDIFF (миллисекунда, DATEADD (день, DATEDIFF (день, 0, sourceDate * ), 0), sourceDate )
Теперь запрос для сравнения временной части поля DateTime с 12: 30: 50.400:
SELECT *
FROM Table1
WHERE
DATEDIFF(millisecond, DATEADD(day, DATEDIFF(day, 0, DateTimeField), 0), DateTimeField)
>
DATEDIFF(millisecond, DATEADD(day, DATEDIFF(day, 0, '1900-01-01T12:30:50.400'), 0), '1900-01-01T12:30:50.400')
Я проверил этот запрос по отношению к другим видам запросов, включая использование оператора вычитания ('-') и CONVERT. Сравнение плана выполнения показывает, что это самый быстрый способ сделать это. Я также проверил реальное время выполнения запроса ... не существует заметного быстрого метода.