Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao T-SQL ISNULL () cắt ngắn chuỗi còn COALESCE thì không?

Theo tài liệu của Microsoft , cho chức năng:

ISNULL(check_expression, replacement_value)

replacement_value phải thuộc loại có thể chuyển đổi hoàn toàn thành loại check_expression . Lưu ý rằng loại cho 'xy'+NULLVARCHAR(3) . Do đó, chuỗi của bạn 'ABCDEFGHIJ' được truyền tới VARCHAR(3) và do đó được cắt bớt.

Nghe có vẻ lạ tại sao nó không phải là VARCHAR(2) , nhưng đây là cách - một ký tự dài hơn 'xy' . Bạn có thể chơi với SQLFiddle này và tự xem loại cho 'xy'+NULL giống như đối với biểu thức CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END , là NULL nhưng hoàn toàn tương thích với VARCHAR(3) .

Có vẻ như đối với biểu thức 'xy'+NULL chiều dài cảm nhận có thể được tính là 'xy' độ dài chuỗi (2) cộng với 1 cho mọi NULL thêm. Ví dụ:loại 'xy'+NULL+NULLVARCHAR(4) , nhập cho 'xy'+NULL+NULL+NULLVARCHAR(5) v.v. - hãy xem SQLFiddle này . Điều này cực kỳ kỳ lạ, nhưng đó là cách MS SQL Server 2008 và 2012 hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Danh sách chuỗi trong SqlCommand thông qua các tham số trong C #

  2. Tổng số phút giữa nhiều phạm vi ngày

  3. Kết nối với SQL Server LocalDB bằng JDBC

  4. SQL Server 2008 Dữ liệu dọc sang ngang

  5. Giá trị hiệu suất của COMB guids