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

Konversi gagal saat mengonversi nilai varchar dalam pernyataan kasus

Saat menggunakan CASE pernyataan, semua ekspresi hasil harus memiliki tipe data yang sama. Jika tidak, hasilnya akan dikonversi ke tipe data dengan prioritas lebih tinggi. Menurut BOL :

Sejak INT memiliki prioritas jenis data yang lebih tinggi dari VARCHAR , "Weeks" dikonversi ke INT dan itu menghasilkan kesalahan:

Contoh lain yang akan menghasilkan kesalahan yang sama:

SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END

Solusinya adalah mengonversi RS.intInterval ke VARCHAR :

CONVERT(VARCHAR(10), RS.intInterval)

Permintaan terakhir Anda seharusnya:

DECLARE @bFlag bit
SET @bFlag = 0
SELECT  something = CASE
                WHEN @bFlag = 1 THEN
                    CASE
                        WHEN RS.intInterval = 1 THEN '"Days"'
                        WHEN RS.intInterval = 2 THEN '"Weeks"'
                        WHEN RS.intInterval = 3 THEN '"Months"'
                        WHEN RS.intInterval = 4 THEN '"Years"'
                    END
                Else 
                    CONVERT(VARCHAR(10), RS.intInterval)
                End
from    MyTable  AS RS WITH (NOLOCK)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan SQL MERGE untuk memperbarui data

  2. Pentingnya log transaksi di SQL Server

  3. Bagaimana cara menjalankan paket SSIS 32 bit dalam paket 64bit?

  4. Permintaan untuk mendapatkan hanya angka dari string

  5. Ada apa dengan (nolock) di SQL Server?