Вопрос
Привет всем,
У меня была некоторая путаница в течение довольно долгого времени, в основном, настил типа DateTime SQL с использованием T-SQL. По сути, я хочу взять значение DateTime, например, 2008-12-1 14:30:12 и сделать это 2008-12-1 00:00:00. В запросах, которые мы запускаем для отчетов, используется значение даты в предложении WHERE, но у меня либо есть значение даты начала и окончания дня, либо использование BETWEEN или я нахожу какой-то другой метод.
В настоящее время я использую следующее:
WHERE CAST(CONVERT(VARCHAR, [tstamp], 102) AS DATETIME) = @dateParam
Однако это кажется довольно неуклюжим. Я надеялся, что будет что-то более простое, как
CAST([tstamp] AS DATE)
Некоторые места в Интернете рекомендуют использовать функцию DATEPART(), но потом я получаю что-то вроде этого:
WHERE DATEPART(year, [tstamp]) = DATEPART(year, @dateParam)
AND DATEPART(month, [tstamp]) = DATEPART(month, @dateParam)
AND DATEPART(day, [tstamp]) = DATEPART(day, @dateParam)
Возможно, меня слишком беспокоит что-то маленькое, и если да, то дайте мне знать. Я просто хочу убедиться, что материал, который я пишу, настолько эффективен, насколько это возможно. Я хочу устранить любые слабые ссылки.
Любые предложения?
Спасибо,
С
Решение
Спасибо всем за отличную обратную связь. Много полезной информации. Я собираюсь изменить наши функции, чтобы устранить функцию в левой части оператора. Хотя большинство наших столбцов даты не используют индексы, вероятно, это еще лучше.