Лично я почти всегда использую Пользовательские функции для этого, если имеешь дело с SQL Server 2005 (или более ранней версией), однако следует отметить, что существуют определенные недостатки использования UDF, особенно еслиприменяя их к пунктам WHERE (см. ниже и комментарии к этому ответу для получения дополнительной информации). При использовании SQL Server 2008 (или выше) - см. Ниже.
Фактически, для большинства создаваемых мной баз данных я добавляю эти UDF в самом начале, так как знаю, что у меня есть 99% -ная вероятность, что я собираюсьчтобы они мне понадобились рано или поздно.
Я создаю один для «только дата» и «только время» (хотя один из «только дата», безусловно, является наиболее используемым из двух).
Вот некоторые ссылки на различные функции UDF, связанные с датами:
Основные функции SQL Server Date, Time и DateTime
Функция Get Only Only
Эта последняя ссылка показывает не менее 3 различных способов получения только даты в поле даты и времени и упоминает некоторые плюсы и минусы каждого подхода.
При использовании UDF следует отметить, что выследует стараться избегать использования UDF как части предложения WHERE в запросе, так как это сильно снизит производительность запроса. Основная причина этого заключается в том, что использование UDF в предложении WHERE отображает это предложение как non-sargable , что означает, что SQL Server больше не может использовать индекс с этим предложением для повышения скорости запроса. выполнение. Что касается моего собственного использования UDF, я часто буду использовать «необработанный» столбец даты в предложении WHERE, но применяю UDF к столбцу SELECTed. Таким образом, UDF применяется только к отфильтрованному набору результатов, а не к каждой строке таблицы как части фильтра.
Конечно, абсолютный лучший подход для этогоиспользовать SQL Server 2008 (или выше) и выделять даты и времени , поскольку ядро базы данных SQL Server изначально предоставляет отдельные компоненты даты и времени и может эффективно запрашивать их независимо без необходимостиUDF или другой механизм для извлечения части даты или времени из составного типа datetime.