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 中,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/VBA | SQL 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) |
CAST 顯性轉換。varchar。CASE 或原生邏輯運算子。(欄位, 起始位置, 長度),注意各資料庫起始位置是 1 而非 0。SUM(CASE...) 比 IIF 更穩定,且查詢優化器對 CASE 的執行計畫通常更優。掌握條件邏輯與字串操作的跨平台寫法,能顯著提升 SQL 代碼的可維護性與效能,是資料庫開發者的必備基本功。