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

isnull vs is null

where isnull(name,'') <> ''

tương đương với

where name is not null and name <> '' 

lần lượt tương đương với

where name <> ''

(nếu tên IS NULL rằng biểu thức cuối cùng sẽ đánh giá là không xác định và hàng không được trả về)

Việc sử dụng ISNULL sẽ dẫn đến việc quét và kém hiệu quả hơn như có thể thấy trong thử nghiệm bên dưới.

SELECT ca.[name],
       [number],
       [type],
       [low],
       [high],
       [status]
INTO   TestTable
FROM   [master].[dbo].[spt_values]
       CROSS APPLY (SELECT [name]
                    UNION ALL
                    SELECT ''
                    UNION ALL
                    SELECT NULL) ca 


CREATE NONCLUSTERED INDEX IX_TestTable ON dbo.TestTable(name)

GO


SELECT name FROM TestTable WHERE isnull(name,'') <> ''

SELECT name FROM TestTable WHERE name is not null and name <> ''
/*Can be simplified to just WHERE name <> '' */

Điều này sẽ cung cấp cho bạn kế hoạch thực hiện mà bạn cần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chọn cùng một ngày mỗi tháng trong 5 năm tới bằng cách sử dụng SQL?

  2. cách chỉ cập nhật ký tự đầu tiên trong SQL Server

  3. Chèn vào biến bảng với union

  4. SqlDependency Độ tin cậy?

  5. Có thể sử dụng hàm Tổng hợp trong trạng thái Chọn mà không sử dụng mệnh đề Nhóm theo không?