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

Cách thay thế NULL bằng một giá trị khác trong SQL Server - ISNULL ()

Khi truy vấn cơ sở dữ liệu SQL Server, đôi khi bạn không muốn trả về giá trị null trong tập kết quả của mình. Và có thể có những lúc bạn muốn chúng trả lại. Nhưng cũng có thể có những lúc bạn muốn chúng được trả lại nhưng dưới dạng một giá trị khác.

Đó là những gì ISNULL() chức năng dành cho.

ISNULL() là một hàm T-SQL cho phép bạn thay thế NULL với một giá trị cụ thể mà bạn chọn.

Ví dụ

Đây là một truy vấn cơ bản trả về một tập hợp kết quả nhỏ:

SELECT TaskCode AS Result
FROM Tasks;

Kết quả:

Result
------
cat123
null  
null  
pnt456
rof789
null  

Chúng ta có thể thấy rằng có ba hàng chứa giá trị rỗng.

Nếu chúng tôi không muốn các giá trị null xuất hiện như vậy, chúng tôi có thể sử dụng ISNULL() để thay thế null với một giá trị khác.

Như thế này:

SELECT ISNULL(TaskCode, 'N/A') AS Result 
FROM Tasks;

Kết quả:

Result
------
cat123
N/A   
N/A   
pnt456
rof789
N/A   

Chúng tôi cũng có thể thay thế nó bằng chuỗi trống:

SELECT ISNULL(TaskCode, '') AS Result 
FROM Tasks;

Kết quả:

Result
------
cat123
      
      
pnt456
rof789
        

Lưu ý rằng ISNULL() yêu cầu đối số thứ hai thuộc loại có thể được chuyển đổi ngầm định thành kiểu dữ liệu của đối số đầu tiên. Đó là vì nó trả về kết quả bằng cách sử dụng kiểu dữ liệu của đối số đầu tiên.

Ngăn chặn các hàng rỗng biến mất

Có một số hàm T-SQL trong đó các giá trị null bị loại bỏ khỏi tập kết quả. Trong những trường hợp như vậy, các giá trị rỗng sẽ hoàn toàn không được trả lại.

Mặc dù đây có thể là một kết quả mong muốn trong một số trường hợp, nhưng trong những trường hợp khác, nó có thể là thảm họa, tùy thuộc vào những gì bạn cần làm với dữ liệu sau khi dữ liệu được trả về.

Một ví dụ về hàm như vậy là STRING_AGG() . Chức năng này cho phép bạn trả về tập kết quả dưới dạng danh sách được phân tách. Tuy nhiên, nó cũng loại bỏ các giá trị null khỏi tập kết quả. Vì vậy, nếu chúng tôi sử dụng hàm này với dữ liệu mẫu ở trên, chúng tôi sẽ nhận được ba kết quả thay vì sáu:

SELECT STRING_AGG(TaskCode, ', ') AS Result 
FROM Tasks;

Kết quả:

Result                
----------------------
cat123, pnt456, rof789

Vì vậy, ba hàng chứa giá trị rỗng sẽ không được trả về.

Trong nhiều trường hợp, đây là một kết quả hoàn hảo, vì tập kết quả của chúng tôi không lộn xộn với các giá trị rỗng. Tuy nhiên, điều này cũng có thể gây ra sự cố, tùy thuộc vào dữ liệu sẽ được sử dụng để làm gì.

Do đó, nếu chúng ta muốn giữ lại các hàng có giá trị null, chúng ta có thể sử dụng ISNULL() để thay thế các giá trị null bằng một giá trị khác:

SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

Kết quả:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

Hàm COALESCE ()

ISNULL() hàm hoạt động theo cách tương tự với COALESCE() hàm số. Vì vậy, chúng tôi có thể thay thế mã trên bằng mã này:

SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

Và nhận được kết quả tương tự:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

Tuy nhiên, có một số khác biệt trong cách hai chức năng hoạt động. Để biết thêm thông tin về sự khác biệt, dưới đây là so sánh của COALESCE()ISNULL() trên trang web của Microsoft.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực thi một tập lệnh SQL lớn (với các lệnh GO)

  2. Kiểm tra tình trạng máy chủ SQL Proactive, Phần 1:Dung lượng đĩa

  3. Trong SQL Server, làm cách nào để tạo câu lệnh CREATE TABLE cho một bảng nhất định?

  4. Đánh giá thiết lập giám sát hiệu suất cơ sở dữ liệu của bạn

  5. Lỗi chuyển đổi dữ liệu tải hàng loạt (loại ký tự không khớp hoặc không hợp lệ cho mã hóa được chỉ định) cho hàng 1, cột 4 (Năm)