Du kan inte blanda datatyper i CASE-uttryck (eller åtminstone utan att se till att de implicit cast OK)
när den konfronteras med ett uttryck som följande kommer SQL Server att använda datatypprioritet för att bestämma vad den övergripande datatypen för uttrycket ska vara
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
För ovanstående datetime
har högre prioritet än char
så den kastar implicit strängen till ett datum som misslyckas.
Följande lyckas dock som sql_variant
har högre prioritet
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Så du kan returnera flera blandade datatyper på det sättet (jag är inte säker på hur lätt sql_variant
är att arbeta med dock)
Annat än det kan du returnera NULL
för ogiltiga datum och tider istället för att returnera nonsensdata eller casta allt till en sträng om du måste returnera den.