Вопрос
Привет всем,
В течение довольно долгого времени у меня возникала путаница, когда я по существу определял тип SQL DateTime с использованием 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)
Может быть, я слишком обеспокоен чем-то маленьким, и если да, пожалуйста, дайте мне знать. Я просто хочу убедиться, что материал, который я пишу, максимально эффективен. Я хочу устранить любые слабые звенья.
Есть предложения?
Спасибо,
С
Решение
Спасибо всем за отличную обратную связь. Много полезной информации. Я собираюсь изменить наши функции, чтобы исключить функцию с левой стороны оператора. Хотя большинство наших столбцов даты не используют индексы, это, вероятно, все еще более эффективная практика.