PATINDEX (Transact-SQL)

傳回指定運算式中的模式,在所有有效文字和字元資料類型中第一次出現的起始位置,如果找不到模式,便傳回零。如需詳細資訊,請參閱<搜尋條件中的模式比對>。

主題連結圖示Transact-SQL 語法慣例

語法

PATINDEX ( '%pattern%' , expression )

引數

  • pattern
    這是一個文字字串。可以使用萬用字元;不過,pattern 的前後都必須有 % 字元 (當搜尋第一個或最後一個字元時除外)。pattern 是一個字元字串資料類型類別目錄的運算式。
  • expression
    這是一個運算式,通常是要在其中搜尋指定模式的資料行。expression 屬於字元字串資料類型類別目錄。

傳回類型

如果 expression 的資料類型是 varchar(max)nvarchar(max),便傳回 bigint;否則傳回 int

備註

如果 patternexpression 是 NULL,當資料庫相容性層級是 70 時,PATINDEX 會傳回 NULL。如果資料庫相容性層級是 65 或更早,只有在 patternexpression 都是 NULL 時,PATINDEX 才會傳回 NULL。

PATINDEX 會以輸入的定序為基礎來執行比較。若要執行指定定序的比較,您可以利用 COLLATE,將明確定序套用至輸入上。

範例

A. 搭配 PATINDEX 使用模式

下列範例會尋找 ensure 模式在 Document 資料表中 DocumentSummary 資料行之特定資料列中的起始位置。

USE AdventureWorks;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO

以下為結果集:

----------- 
64          

(1 row(s) affected)

如果您沒有利用 WHERE 子句來限制要搜尋的資料列,查詢會傳回資料表的所有資料列,且針對找到模式的所有資料列報告非零值,找不到模式的所有資料列則會報告零。

B. 搭配 PATINDEX 使用萬用字元

下列範例利用萬用字元來尋找 en_ure 模式在 Document 資料表中 DocumentSummary 資料行之特定資料列中的起始位置,底線是代表仕何字元的萬用字元。

USE AdventureWorks;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO

以下為結果集:

------------
64

(1 row(s) affected)

如果您沒有限制要搜尋的資料列,查詢會傳回資料表的所有資料列,且會針對找到模式的資料列報告非零值。

C. 搭配 PATINDEX 使用 COLLATE

下列範例利用 COLLATE 函數來明確指定所搜尋之運算式的定序。

USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;
GO

請參閱

參考

資料類型 (Transact-SQL)
字串函數 (Transact-SQL)
[ ] (萬用字元 - 相符的字元) (Transact-SQL)
[^] (萬用字元 - 不相符的字元) (Transact-SQL)
_ (萬用字元 - 符合一個字元) (Transact-SQL)
% (萬用字元 - 相符的字元) (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助