首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server ISNULL 函數與 NULL 判斷完整指南:用法、陷阱與最佳實踐

     編輯:關於SqlServer

ISNULL:以指定值取代 NULL


ISNULL(check_expression, replacement_value)
  • check_expression:任意型別,被檢查運算式。
  • replacement_value:若為 NULL 時回傳的值,**必須能隱含轉換為 check_expression 型別**。
  • 回傳型別 = check_expression 型別(優先順序:較高優先級型別)。

基本範例


-- 數值預設值
SELECT AVG(ISNULL(Weight, 50)) FROM Production.Product;

-- 字串預設值
SELECT ISNULL(Author, 'Unknown') FROM News;

-- 日期預設值
SELECT ISNULL(EndDate, GETDATE()) FROM Tasks;

關鍵陷阱:ISNULL ≠ IS NULL

用法用途範例
ISNULL(expr, val)**函數**:expr 為 NULL 時回傳 valISNULL(Price, 0)
expr IS NULL**運算子**:判斷 expr 是否為 NULL(WHERE/IF 條件)WHERE Weight IS NULL
expr IS NOT NULL**運算子**:判斷 expr 不為 NULLWHERE Weight IS NOT NULL

❌ 錯誤:WHERE ISNULL(Weight, 0) = 0 — 會將「原本 0」與「原本 NULL 替換為 0」混淆。
✅ 正確:WHERE Weight IS NULL(找 NULL)或 WHERE Weight = 0(找 0)。

變數/欄位 NULL 判斷模式速查


-- T-SQL 變數
DECLARE @V INT;
IF @V IS NULL PRINT 'NULL';

-- WHERE 子句
SELECT * FROM Table WHERE Column IS NULL;
SELECT * FROM Table WHERE Column IS NOT NULL;

-- ISNULL 函數提供預設值
SELECT ISNULL(@V, -1);          -- 變數
SELECT ISNULL(Column, 'N/A');   -- 欄位

進階:COALESCE 多參數替代


-- 回傳第一個非 NULL 參數(ANSI 標準,支援多參數)
COALESCE(col1, col2, col3, '預設值')
  • ISNULL 只接受 2 參數,COALESCE 可接受 N 參數。
  • COALESCE 回傳型別依**所有參數中優先級最高者**;ISNULL 依第一參數。
  • 效能:ISNULL 為內建函數,單參數替換略快;邏輯複雜時用 COALESCE 更簡潔。

實戰建議

  1. 查詢條件務必用 IS NULL / IS NOT NULL,不可用 = NULL 或 ISNULL。
  2. 輸出顯示、聚合計算、避免 NULL 參與運算 時用 ISNULL(col, default)。
  3. 多欄位優先取值 用 COALESCE(col1, col2, default)。
  4. 動態 SQL 組裝 時,字串欄位 ISNULL(col, '') 避免 NULL + 'str' → NULL 導致整串變 NULL。

結語

ISNULL 是「替換 NULL」,IS NULL 是「判斷 NULL」——**一字之差,用途天差地遠**。牢記此區別,配合 COALESCE 多參數替代,即能在 T-SQL 中精準處理 NULL 值,避免「NULL 伝播」導致的邏輯錯誤與資料遺漏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved