首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 判斷字串是否包含數字與英文字母:PATINDEX 實戰技巧

     編輯:關於SqlServer

快速判斷字串是否包含數字或英文字母,PATINDEX 搭配萬用字元模式是最簡潔高效的方法。本文提供即用型查詢範例與邏輯解析。

判斷是否包含英文字母 (A-Z, a-z)

-- 回傳 > 0 表示包含字母,= 0 表示不包含
SELECT PATINDEX('%[A-Za-z]%', 'ads23432');  -- 1 (第 1 字元即為字母)
SELECT PATINDEX('%[A-Za-z]%', '123456');    -- 0

判斷是否包含數字 (0-9)

-- 回傳 > 0 表示包含數字,= 0 表示不包含
SELECT PATINDEX('%[0-9]%', '234sdf');   -- 1
SELECT PATINDEX('%[0-9]%', 'abcdef');   -- 0

進階應用:WHERE 條件篩選

-- 找出同時包含字母與數字的帳號
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 vs LIKE 比較

特性PATINDEXLIKE
回傳值首次符合位置 (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%'),但萬用字元開頭 '%[...]%' 會掃描全表。
  • 大量資料篩選建議加入計算欄位或全文檢索。
  • SQL Server 2016+ 可考慮 TRANSLATE / STRING_ESCAPE 輔助處理。

PATINDEX 搭配字元範圍模式,是 T-SQL 中判斷字串字元組成最原生、零相依的利器。

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