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

SQL Server ISNULL 函數實戰:空值判斷與預設值處理的正確姿勢

     編輯:關於SqlServer

ISNULL 是 SQL Server 處理空值最常用的函數,但許多開發者混淆了它與標準 SQL COALESCE、邏輯判斷 IS NULL 的差異。本文透過實例釐清用法陷阱,示範正確的空值處理模式。

語法與核心行為

ISNULL ( check_expression , replacement_value )

  • check_expression:要檢查的運算式。
  • replacement_value:若 check_expression 為 NULL,回傳此值(型別會隱含轉換為 check_expression 的型別)。
  • 回傳:非 NULL 時回傳 check_expression;為 NULL 時回傳 replacement_value。

實用範例:查詢欄位若為 NULL 則顯示空字串

SELECT ISNULL(LastChanged, '') AS LastChanged
FROM vhHostList
WHERE S_Comment = 'test202';

若 LastChanged 為 NULL,結果顯示空字串 '';否則顯示原值。

常見錯誤:前端程式碼的空值判斷陷阱

錯誤寫法 (ASP/VB 經典案例):

' 訂單狀態欄位:NULL=未審核,非 NULL=已審核
If rs("Status") <> "" Then
    Response.Write "已審"
Else
    Response.Write "審核"
End If

問題:

  1. rs("Status") <> "" 無法區分 NULL、''、' '、'0' 等非空但非預期值。
  2. 資料庫層面未正規化空值語意,導致前端邏輯脆弱。

正確做法:資料庫層統一空值語意

-- 查詢時統一將 NULL 轉為空字串
SELECT 
    OrderId,
    ISNULL(Status, '') AS Status  -- NULL → ''
FROM Orders
WHERE ...

前端即可單純判斷:

If rs("Status") = "" Then
    ' 未審核:顯示審核連結
Else
    ' 已審核:顯示狀態文字
End If

進階比較:ISNULL vs COALESCE vs CASE

特性ISNULLCOALESCECASE
參數數量固定 2 個1~N 個彈性
標準相容性T-SQL 專有ANSI SQL 標準ANSI SQL 標準
回傳型別優先序第一參數型別所有參數最高優先序所有分支最高優先序
效能略優(內建函數)略低(轉為 CASE)基準
可攜性僅 SQL Server跨資料庫跨資料庫

最佳實務建議

  1. 單一欄位 NULL 替換:優先用 ISNULL,簡潔高效。
  2. 多備選值/跨平台:用 COALESCE(col1, col2, col3, 'default')。
  3. 複雜邏輯/型別控制:用 CASE WHEN col IS NULL THEN ... ELSE ... END。
  4. 資料庫設計階段:盡量定義 NOT NULL DEFAULT '' 或 DEFAULT 0,從源頭消除 NULL 處理負擔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved