Прежде всего, посмотрите на это частичное выражение из кода в вопросе:
CONVERT(v.CustomerPurchaseDateTime,GETDATE())
Это не имеет смысла. Это не то, как вызывать функцию преобразования. Первый аргумент, где у вас есть v.CustomerPurchaseDateTime
, должен быть типом данных, например date
или datetime
. Даже строковое значение типа 'date'
не верно. Это затем приводит в замешательство более крупный вызов функции DATEADD()
, так что я не уверен, что Sql Server будет пытаться делать с ним больше, и я подозреваю, что когда вы исправите свою ошибку, вы перестанете видеть другую для этой строки .
Но я бы так не написал.
Избегайте вызова функций, таких как CONVERT()
или CAST()
, для значений в таблице, когда это возможно. Вызов такой функции нарушает любые индексы в столбце, которые могут помочь в запросе, что снижает основную производительность базы данных. Кроме того, вам всегда нужно будет вызывать эту функцию для каждой строки в таблице , даже строк, которые не будут отображаться в результатах. В этом случае вы можете избежать использования функции для значений в таблице следующим образом:
WHERE v.CustomerPurchaseDateTime >= CAST(DATEADD(day, -1 current_timestamp) AS DATE)
или если вы когда-либо будете записывать будущие покупки / предварительные заказы в эту таблицу:
WHERE v.CustomerPurchaseDateTime >= CAST(DATEADD(day, -1 current_timestamp) AS DATE)
AND v.CustomerPurchaseDateTime < CAST(current_timestamp AS DATE)
Оба они по-прежнему вызывают функцию (CAST()
), но они вызывают ее, используя значение current_timestamp
(такое же, как getdate()
, но более кроссплатформенное и стандартное), так что оно фактически является константой. Ни один из моих вариантов не требует каких-либо вычислений для значений, фактически сохраненных в таблице. Они вызывают только функции один раз для всего запроса , а не один раз для строки, и не мешают индексации.
Но опубликованная в вопросе ошибка не имеет ничего общего с этим.
Ошибка жалуется на столбец AdmitDtm
, который не показан ни в одном коде в вопросе. Вы должны посмотреть, где используется этот столбец, и убедиться, что синтаксис в этой области также правильный.