前端提供多個可選查詢欄位(如 FirstName、LastName),使用者可任意組合、可留空。傳統做法:
DECLARE @FirstName NVARCHAR(50) = '', @LastName NVARCHAR(50) = '';
SELECT *
FROM Employees
WHERE CHARINDEX(
CASE WHEN @FirstName = '' THEN FirstName ELSE @FirstName END,
FirstName
) > 0
AND CHARINDEX(
CASE WHEN @LastName = '' THEN LastName ELSE @LastName END,
LastName
) > 0;
'' 時,CASE 回傳欄位本身 → CHARINDEX(FirstName, FirstName) 恆 > 0 → 條件恆真(等於忽略該欄位)。CHARINDEX(@val, Column) 進行模糊比對。| @FirstName | @LastName | 結果 |
|---|---|---|
| '' | '' | 全表 |
| 'n' | '' | FirstName 含 'n' |
| 'n' | 'd' | FirstName 含 'n' 且 LastName 含 'd' |


-- 簡單 CASE(等值判斷) CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END -- 搜尋 CASE(任意布林運算式) CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
-- 依薪資區間分組統計人數
SELECT
CASE
WHEN salary <= 3000 THEN '低'
WHEN salary > 3000 AND salary <= 6000 THEN '中'
WHEN salary > 6000 AND salary <= 9000 THEN '高'
ELSE '極高'
END AS salary_band,
COUNT(*) AS cnt
FROM Employees
GROUP BY
CASE
WHEN salary <= 3000 THEN '低'
WHEN salary > 3000 AND salary <= 6000 THEN '中'
WHEN salary > 6000 AND salary <= 9000 THEN '高'
ELSE '極高'
END;
SELECT country,
SUM(CASE WHEN sex = 'M' THEN population ELSE 0 END) AS male_pop,
SUM(CASE WHEN sex = 'F' THEN population ELSE 0 END) AS female_pop
FROM CountryPop
GROUP BY country;
CONSTRAINT chk_female_salary CHECK (
CASE WHEN sex = 'F' THEN CASE WHEN salary > 5000 THEN 1 ELSE 0 END ELSE 1 END = 1
)
CASE 依序評估,**首個符合條件即返回**,後續分支被忽略。CASE 中對大量資料做昂貴運算,必要時改用計算欄位持久化。CHARINDEX/LIKE 替代動態 % 拼接,效能更穩定。