首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 條件函數 IIF 與 CASE WHEN 完整指南:跨資料庫平台的最佳實踐

     編輯:MySQL 資料庫相關知識

核心概念:IIF 函數語法與行為

IIF(Immediate If)是一種簡潔的條件判斷函數,根據邏輯表達式的真偽返回兩個值之一。其基本語法為 IIF(logical_expression, true_value, false_value)。當邏輯表達式評估為 TRUE(非零值)時返回 true_value,否則返回 false_value。值得注意的是,IIF 並非標準 SQL,主要存在於 Access、SQL Server (T-SQL) 及部分 OLAP 環境中。

數值與字串的雙重應用場景

數值運算示例

-- 若 Measures.CurrentMember 為空單元則返回 0,否則返回 1
IIF(IsEmpty(Measures.CurrentMember), 0, 1)

字串邏輯判斷

-- 空單元返回 "Yes",否則返回 "No"
IIF(IsEmpty(Measures.CurrentMember), "Yes", "No")

跨平台差異:Access vs SQL Server

在 Access 中,IIF 常用於統計彙總,例如統計實際應繳費用戶數:

SELECT SUM(IIF(金額 > 0, 1, 0)) AS num FROM 費用

然而 SQL Server (T-SQL) 雖支援 IIF (自 2012 版起),但傳統做法使用標準 SQL 的 CASE WHEN:

SELECT SUM(CASE WHEN 金額 > 0 THEN 1 ELSE 0 END) AS num FROM 費用

CASE WHEN 具備更強的可移植性與擴展性,支援多條件分支:

SELECT id,
       CASE WHEN bz = '1' THEN xx
            WHEN bz = '2' THEN yy
            ELSE zz
       END AS tt
FROM xxx

字串處理函數對照表

Access/VBASQL Server (T-SQL)標準 SQL / MySQL / PostgreSQL
MID(str, start, length)SUBSTRING(str, start, length)SUBSTRING(str FROM start FOR length)
LEFT(str, length)LEFT(str, length)LEFT(str, length) / SUBSTRING(str FROM 1 FOR length)
RIGHT(str, length)RIGHT(str, length)RIGHT(str, length) / SUBSTRING(str FROM LENGTH(str)-length+1)

SUBSTRING 詳細參數說明

  • expression:字串、二進位、text、image、欄位或包含欄位的運算式,不可含彙總函數。
  • start:整數,指定子字串起始位置(1-based)。
  • length:整數,指定返回字元數或位元組數。

LEFT 函數規範

  • character_expression:字元或二進位資料運算式,需可隱性轉換為 varchar,否則需用 CAST 顯性轉換。
  • integer_expression:正整數;若為負數則返回空字串。
  • 返回型別:varchar。

最佳實踐建議

  1. 優先使用 CASE WHEN:符合 ANSI SQL 標準,跨資料庫遷移無痛點。
  2. 避免在 WHERE 條件中使用 IIF:可能導致索引失效,改用 CASE 或原生邏輯運算子。
  3. 字串截取統一用 SUBSTRING:參數順序為 (欄位, 起始位置, 長度),注意各資料庫起始位置是 1 而非 0。
  4. 效能考量:大量資料彙總時,SUM(CASE...) 比 IIF 更穩定,且查詢優化器對 CASE 的執行計畫通常更優。

掌握條件邏輯與字串操作的跨平台寫法,能顯著提升 SQL 代碼的可維護性與效能,是資料庫開發者的必備基本功。

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