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.