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

Mengapa T-SQL ISNULL() memotong string dan COALESCE tidak?

Menurut dokumentasi Microsoft , untuk fungsi:

ISNULL(check_expression, replacement_value)

replacement_value harus dari tipe yang secara implisit dapat dikonversi ke tipe check_expression . Perhatikan bahwa ketik untuk 'xy'+NULL adalah VARCHAR(3) . Karena ini string Anda 'ABCDEFGHIJ' dilemparkan ke VARCHAR(3) dan dengan demikian dipangkas.

Kedengarannya aneh mengapa bukan VARCHAR(2) , tapi beginilah adanya - satu karakter lebih panjang dari 'xy' . Anda dapat bermain dengan SQLFiddle ini dan lihat sendiri jenis itu untuk 'xy'+NULL sama dengan ekspresi CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END , yaitu NULL tetapi secara implisit kompatibel dengan VARCHAR(3) .

Tampaknya untuk ekspresi 'xy'+NULL panjang yang dirasakan dapat dihitung sebagai 'xy' panjang string (2) ditambah 1 untuk setiap NULL ditambahkan. Misalnya, ketik 'xy'+NULL+NULL adalah VARCHAR(4) , ketikkan 'xy'+NULL+NULL+NULL adalah VARCHAR(5) dan seterusnya - lihat SQLFiddle ini . Ini sangat aneh, tapi begitulah cara kerja MS SQL Server 2008 dan 2012.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hubungkan ke SQL Server melalui alamat IP

  2. Optimalisasi kueri SQL — Cara menentukan kapan dan jika diperlukan

  3. Buat Tabel Sementara di SQL Server

  4. Cara Menambahkan Batasan DEFAULT ke Kolom yang Ada di SQL Server

  5. Izin SQL Server pada Procs Tersimpan dengan SQL dinamis