Не можете да смесвате типове данни в CASE изрази (или поне без да внимавате, че имплицитно ще изведат OK)
когато се сблъска с израз като следния, SQL Server ще използва приоритет на типа данни, за да определи какъв трябва да бъде общият тип данни на израза
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
за невалидни дати и часове, вместо да връщате безсмислените данни или преобразувайте всичко в низ, ако трябва да го върнете.