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
を返すことができます 意味のないデータを返す代わりに、無効な日時を返すか、返す必要がある場合はすべてを文字列にキャストします。