Anda tidak dapat mencampur tipe data dalam ekspresi CASE (atau setidaknya tanpa berhati-hati bahwa mereka akan secara implisit memberikan OK)
ketika dihadapkan dengan pernyataan seperti berikut SQL Server akan menggunakan prioritas tipe data untuk menentukan tipe data keseluruhan dari ekspresi yang seharusnya
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
Untuk datetime di atas memiliki prioritas lebih tinggi daripada char sehingga secara implisit melemparkan string ke tanggal yang gagal.
Namun berikut ini berhasil sebagai sql_variant memiliki prioritas yang lebih tinggi
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Jadi Anda dapat mengembalikan beberapa tipe data campuran seperti itu (saya tidak yakin seberapa mudah sql_variant adalah untuk bekerja dengannya)
Selain itu, Anda dapat mengembalikan NULL untuk tanggal yang tidak valid daripada mengembalikan data yang tidak masuk akal atau membuang semuanya ke string jika Anda harus mengembalikannya.