次の方法で共有


PATINDEX(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

指定した式で最初に出現するパターンの開始位置を返します。パターンが見つからない場合は、すべての有効なテキストデータ型と文字データ型で 0 を返します。

Transact-SQL 構文表記規則

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

検索するシーケンスを含む文字式。 ワイルドカード文字も使用可能です。ただし、% 文字は必ず前に出て パターンに従う必要があります (最初の文字や最後の文字を探す場合は除きます)。 パターン は文字文字列のデータタイプカテゴリの表現です。 パターン は8,000文字までに制限されています。

Note

従来の正規表現は、SQL Server 2022 (16.x) 以前のバージョンではネイティブにサポートされていませんが、さまざまなワイルドカード式を使用して同様の複雑なパターン マッチングを実現できます。 ワイルドカード構文の詳細については、 Stringoperators のドキュメントを参照してください。 SQL Server 2025(17.x)における正則表現関数に関する情報は、正 則表現関数を参照してください。

expression

通常は指定されたパターンを検索する列の です。 は文字文字列のデータ型カテゴリに属します。

戻り値の型

Bigint、Varchar(Max)またはnvarchar(max)データ型の表現を用い、それ以外の場合は知力

Remarks

パターンNULLされた場合、PATINDEXNULLを返します。

式が 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 でパターンを使用する

以下の例は、AdventureWorks2025データベースのDocumentテーブルのDocumentSummary列の特定の行でパターンがensure始まる位置を示しています。

SELECT PATINDEX('%ensure%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO

結果セットは次のとおりです。

position
--------
64

WHERE句を使用して検索する行を制限しない場合、クエリはテーブル内のすべての行を返し、パターンが見つかった行の 0 以外の値を報告し、パターンが見つからなかったすべての行に対して 0 を報告します。

C. PATINDEX でワイルドカード文字を使用する

次の例では、ワイルドカードの % と _ を使用して、指定した文字列で任意の 1 文字と 'en' が続くパターン 'ure' が始まる位置を探します (インデックスは 1 から開始)。

SELECT PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;

結果セットは次のとおりです。

position
--------
8

PATINDEXLIKE と同様の機能を持つので、任意のワイルドカードを使用できます。 パターンをパーセントで囲む必要はありません。 PATINDEX('a%', 'abc') は 1 を返し、PATINDEX('%a', 'cba') は 3 を返します。

LIKE とは異なり、PATINDEXCHARINDEX と同様に位置を返します。

D. PATINDEX で複雑なワイルドカード式を使用する

以下の例では、[^]文字列演算子を使って、数字、文字、スペース以外の文字の位置を見つけます。

SELECT PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!') AS position;

結果セットは次のとおりです。

position
--------
33

E. PATINDEX で COLLATE を使用する

次の例では、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