快速判斷字串是否包含數字或英文字母,PATINDEX 搭配萬用字元模式是最簡潔高效的方法。本文提供即用型查詢範例與邏輯解析。
-- 回傳 > 0 表示包含字母,= 0 表示不包含
SELECT PATINDEX('%[A-Za-z]%', 'ads23432'); -- 1 (第 1 字元即為字母)
SELECT PATINDEX('%[A-Za-z]%', '123456'); -- 0
-- 回傳 > 0 表示包含數字,= 0 表示不包含
SELECT PATINDEX('%[0-9]%', '234sdf'); -- 1
SELECT PATINDEX('%[0-9]%', 'abcdef'); -- 0
-- 找出同時包含字母與數字的帳號
SELECT * FROM Users
WHERE PATINDEX('%[A-Za-z]%', Account) > 0
AND PATINDEX('%[0-9]%', Account) > 0;
-- 找出純數字或純字母的異常資料
SELECT * FROM Codes
WHERE PATINDEX('%[A-Za-z]%', Code) = 0
OR PATINDEX('%[0-9]%', Code) = 0;
| 特性 | PATINDEX | LIKE |
|---|---|---|
| 回傳值 | 首次符合位置 (INT, 1-based) | Boolean (TRUE/FALSE/UNKNOWN) |
| 可用於 SELECT 列表 | 是 | 否 (僅 WHERE/CASE) |
| 效能 | 略高 (需計算位置) | 略低 (僅判斷存在) |
| 模式支援 | 相同 (萬用字元、字元範圍、^排除) | 相同 |
%[A-Za-z]%:包含任一英文字母%[0-9]%:包含任一數字%[^A-Za-z0-9]%:包含特殊字元 (非英數)%[A-Z]%:包含大寫字母%[a-z]%:包含小寫字母PATINDEX 可利用索引 (若模式為開頭固定字串,如 'abc%'),但萬用字元開頭 '%[...]%' 會掃描全表。TRANSLATE / STRING_ESCAPE 輔助處理。PATINDEX 搭配字元範圍模式,是 T-SQL 中判斷字串字元組成最原生、零相依的利器。