Как сравнить только временную часть типа данных DateTime в SQL Server 2005? Например, я хочу получить все записи, в которых MyDateField выполняется через определенное время. Следующий пример - очень длинный и, вероятно, не быстрый способ сделать это. Я хочу, чтобы все даты, когда MyDateField больше 12: 30: 50,400Сравнение временной части типа данных DateTime в SQL Server 2005
SELECT *
FROM Table1
WHERE ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) = 50) AND (DATEPART(millisecond, MyDateField) > 400))
OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) > 50))
OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) > 30))
OR ((DATEPART(hour, MyDateField) > 12))
Обратите внимание, что если вам действительно нужно обработать дату и время по отдельности, вы эффективно нарушаете правила нормализации. Значение DateTime - это конкретный момент времени в дате. Дата и время - это многозначное поле, которое должно быть разбито. Причина, по которой ваш код работает медленно, заключается в том, что вы его нормализовали неправильно. –
@ Lasse - как далеко вы это возьмете? Конечно, вы не храните: день, месяц, год, час, минуту, день недели, выходные, квартал, неделю в отдельных полях вместо того, чтобы просто хранить дату. – JeffO
@ Lasse - Конечно, я мог бы отделить поле DateTime в полях Дата и Время. Но тогда у меня была бы такая же проблема, чтобы сравнивать дату и время вместе. –