Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

PILIH KASUS CAST Kesalahan Konversi

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. String apa yang saya gunakan untuk terhubung ke SQL Server?

  2. Prosedur dan Izin Tersimpan - Apakah EXECUTE cukup?

  3. SQL TRY-CATCH dan kolom yang hilang

  4. mengalami masalah saat mencoba memulihkan basis data terenkripsi

  5. Gunakan TYPE_ID() untuk Mendapatkan ID Tipe Data di SQL Server