`IIF` 是 Access/VB 系函數,SQL Server 2012+ 才引入以兼容遷移。原生 **CASE 表達式** 才是 T-SQL 標準寫法。本文對比兩者語法、效能與最佳實踐。
-- IIF (SQL Server 2012+)
IIF(condition, true_value, false_value)
-- CASE 簡單形式
CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default_result END
-- CASE 搜尋形式 (最通用)
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default_result END
-- IIF 寫法
SELECT SUM(IIF(Amount > 0, 1, 0)) AS cnt FROM Fees;
-- CASE 寫法 (標準 SQL,所有版本支援)
SELECT SUM(CASE WHEN Amount > 0 THEN 1 ELSE 0 END) AS cnt FROM Fees;
| Access / VB | SQL Server (T-SQL) | 備註 |
|---|---|---|
| IIF(cond, t, f) | CASE WHEN cond THEN t ELSE f END | IIF 2012+ 才支援 |
| Mid(str, start, len) | SUBSTRING(str, start, len) | 起始位置皆從 1 算 |
| Left(str, len) | LEFT(str, len) | 語法相同 |
| Right(str, len) | RIGHT(str, len) | 語法相同 |
| Len(str) | LEN(str) | 語法相同 |
| InStr([start,] str1, str2) | CHARINDEX(str2, str1 [, start]) | 參數順序不同 |
| Replace(str, old, new) | REPLACE(str, old, new) | 語法相同 |
| Format(date, fmt) | FORMAT(date, fmt) (2012+) / CONVERT | FORMAT 較慢,大量用 CONVERT |