Как ясно из комментария Ларну, проблема заключается в смешивании типов данных в выражении case
. (T SQL не имеет оператора case
.)
Гадание на: Due_Date
и OB_Delivery_Date
может быть Date
столбцами. Если это так, вы можете просто использовать DateDiff
, чтобы получить разницу в днях:
DateDiff( day, Deliveries.Due_Date, Deliveries.OB_Delivery_Date )
Поскольку оба предложения then
возвращают одно и то же значение, их можно объединить:
case when DateDiff( day, Deliveries.Due_Date, Deliveries.OB_Delivery_Date ) != 0
then Cast( DateDiff( day, Deliveries.Due_Date, Deliveries.OB_Delivery_Date ) as VarChar(3) )
else 'NO' end as Days_Before_Due_Date
Обратите внимание, что Cast
используется для преобразования числового значения c в строку.
Если вы хотите обрабатывать рано / вовремя / поздно, вы можете использовать Sign
:
case Sign( DateDiff( day, Deliveries.Due_Date, Deliveries.OB_Delivery_Date ) )
when 1 then 'Late'
when 0 then 'On Time'
when -1 then 'Early'
end as ScheduleStatus