共用方式為


PATINDEX(Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲Microsoft Fabric 中的 SQL 資料庫

在所有有效的文字和字元資料類型上,傳回指定運算式中第一次出現模式的起始位置,如果找不到模式,則為零。

Transact-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 是 NULLPATINDEX 則傳回錯誤。

PATINDEX 起始位置是 1

PATINDEX 根據輸入的對照執行比較。 若要在指定的定序中執行比較,您可以使用 將 COLLATE 明確定序套用至輸入。

補充字元 (代理配對)

當你使用帶有補充字元(SC)的校列時,回傳值會將 表達式 參數中任意 UTF-16 替代對視為單一字元。 如需詳細資訊,請參閱定序和 Unicode 支援

0x0000char(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