Нельзя смешивать типы данных в выражениях CASE (или, по крайней мере, не позаботиться о том, чтобы они неявно приводили OK)общий тип данных выражения должен быть
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
. Приведенный выше datetime
имеет более высокий приоритет, чем char
, поэтому он неявно преобразует строку в дату, которая не удалась.
однако, поскольку sql_variant
имеет более высокий приоритет
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Таким образом, вы можете возвращать несколько смешанных типов данных таким образом (хотя я не уверен, насколько просто работать с sql_variant
)
Кроме этого, вы можете вернуть NULL
для недопустимых значений даты вместо того, чтобы возвращать бессмысленные данные или преобразовать все в строку, если вы должны ее вернуть.