適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
在所有有效的文字和字元資料類型上,傳回指定運算式中第一次出現模式的起始位置,如果找不到模式,則為零。
Syntax
PATINDEX ( '%pattern%' , expression )
Arguments
pattern
包含要找到之序列的字元表達式。 可以使用萬用卡角色;然而,% 字必須排在前面並遵循 模式 (搜尋第一個或最後一個字元時除外)。 pattern 是字串資料型態類別的表達式。 模式 限制為8,000字元。
Note
雖然 SQL Server 2022 (16.x) 和更早版本本身不支援傳統正規表示式,但可以使用各種萬用字元運算式來達成類似的複雜模式比對。 欲了解更多百用字元語法,請參閱 字串運算子 文件。 關於 SQL Server 2025(17.x)中正則表達式函式的資訊,請參見 正則表達式函式。
expression
一個 表達式,通常是用來搜尋指定模式的欄位。 表達 式屬於字串資料類型類別。
傳回類型
若表達式為 varchar(max) 或 nvarchar(max) 資料型態,則為 bigint;否則,智力。
Remarks
若模式為 NULL,則PATINDEX返回 NULL。
如果 expression 是 NULL, PATINDEX 則傳回錯誤。
的 PATINDEX 起始位置是 1。
PATINDEX 根據輸入的對照執行比較。 若要在指定的定序中執行比較,您可以使用 將 COLLATE 明確定序套用至輸入。
補充字元 (代理配對)
當你使用帶有補充字元(SC)的校列時,回傳值會將 表達式 參數中任意 UTF-16 替代對視為單一字元。 如需詳細資訊,請參閱定序和 Unicode 支援。
0x0000 (char(0)) 是 Windows 定序中未定義的字元,無法包含在 PATINDEX.
Examples
A. 基本 PATINDEX 範例
下例範例會檢查 interesting data字元開頭位置的短字元字串 (ter)。
SELECT PATINDEX('%ter%', 'interesting data') AS position;
結果集如下所示。
position
--------
3
B. 搭配 PATINDEX 使用型樣
以下範例找出 ensure AdventureWorks2025 資料庫中該欄位Document特定列DocumentSummary中圖案起點的位置。
SELECT PATINDEX('%ensure%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
結果集如下所示。
position
--------
64
如果您未使用子句來 WHERE 限制要搜尋的資料列,則查詢會傳回資料表中的所有資料列,並報告找到型樣的資料列的非零值,並報告找不到型樣的所有資料列的零值。
C. 搭配 PATINDEX 使用萬用字元
下列範例在指定的字串中 (索引從 1 開始),使用 % 和 _ 萬用字元來尋找模式 'en' 後面接著任何一個字元和 'ure' 的開始位置:
SELECT PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;
結果集如下所示。
position
--------
8
PATINDEX 的運作方式就像 LIKE,所以您可以使用任何萬用字元。 您不必將模式括在百分比之間。
PATINDEX('a%', 'abc') 會傳回 1 且 PATINDEX('%a', 'cba') 會傳回 3。
與 LIKE 不同的是,PATINDEX 會傳回位置,類似 CHARINDEX。
D. 搭配 PATINDEX 使用複雜的萬用字元運算式
以下範例使用 [^]字串運算 子來尋找非數字、字母或空格的字元位置。
SELECT PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!') AS position;
結果集如下所示。
position
--------
33
E. 將 COLLATE 與 PATINDEX 搭配使用
下列範例利用 COLLATE 函數來明確指定所搜尋之運算式的定序。
USE tempdb;
GO
SELECT PATINDEX('%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN);
GO
結果集如下所示。
position
--------
9
F. 使用變數來指定型樣
以下範例使用變數將值傳遞給 模式 參數。 此範例使用 AdventureWorks2025 資料庫。
DECLARE @MyValue AS VARCHAR (10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
結果集如下所示。
position
--------
22