SQL Server 用 PATINDEX 找出特定模式文字的位置

December 24, 2024

SQL Server 中,PATINDEX 語法可以用簡化的表達式語法,查詢特定模式 (規則) 文字的位置。

語法說明與範例

以下是語法說明:

PATINDEX ('%pattern%', expression )  

'%pattern%'  表示要查詢的模式 (規則),expression  表示被查詢的字串,例如查詢 ter 出現的位置:

SELECT PATINDEX('%ter%', 'interesting data') AS Position;  

查詢結果 Position = 3。下方則用另外一個簡易表達式,查詢「一二三」中任一字元出現的位置:

SELECT PATINDEX(N'%[一二三]%', N'第三天') AS Position;  

其回傳結果為 2,因為匹配到「三」。

下面的表達式可找出不匹配任一英文字母,其回傳結果為 4,因為第一個不匹配的字元為「1」。

SELECT PATINDEX('%[^A-Za-z]%', 'abc123') AS Position;  

可以使用的 match 運算子

SQL Server 沒辦法像其它程式語言一樣使用所有的正規表達式 (Regex) 符號,以下列出可以用的符號,又稱為 match 運算子:

運算子 說明 模式範例 符合模式範例的文字
% 匹配 1 ~ 多個字元 %ter% pattern, theater
[] 匹配任一個字元 %[一二三]% 星期一, 第二天
[^] 不匹配任一個字元 %[^A-Za-z]%
abc123, 2024
_ 匹配單一任意字元 m_d%
model, medium

這些運算子適用於 PATINDEX 和 LIKE 語法。

參考資料