PATINDEX (Transact-SQL)
すべて有効なテキスト型と文字型で指定された式の中で、パターンが最初に現れる先頭位置を返します。パターンが見つからない場合は、0 を返します。
構文
PATINDEX ( '%pattern%' , expression )
引数
pattern
検索するシーケンスを含む文字式です。 ワイルドカード文字も指定できますが、先頭の文字または最後の文字を検索する場合を除き、pattern を % 文字で囲む必要があります。 pattern は文字列データ型に分類される式です。 pattern の上限は 8,000 文字です。expression
式です。通常は、指定したパターンの検索対象となる列です。 expression は文字列データ型に分類されます。
戻り値の型
expression のデータ型が varchar(max) または nvarchar(max) の場合は bigint です。それ以外の場合は int です。
説明
pattern または expression が NULL の場合、PATINDEX は NULL を返します。
PATINDEX では、入力の照合順序に基づいて比較が行われます。 指定した照合順序で比較を実行するには、COLLATE を使って入力に明示的な照合順序を適用できます。
補助文字 (サロゲート ペア)
SC の照合順序を使用する場合、戻り値では、expression パラメーターの UTF-16 サロゲート ペアが 1 文字としてカウントされます。 詳細については、「照合順序と Unicode のサポート」を参照してください。
0x0000 (char(0)) は Windows 照合順序で未定義の文字であり、PATINDEX に含めることはできません。
使用例
A. PATINDEX でパターンを使用する
次の例では、Document テーブルにある DocumentSummary 列の特定の行で、パターン ensure が始まる位置を検出します。
USE AdventureWorks2012;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
以下に結果セットを示します。
-----------
64
(1 row(s) affected)
検索する行を WHERE 句で限定しない場合は、クエリによりテーブル内のすべての行が返されます。パターンが見つかった行は 0 以外の値に、パターンが見つからなかったすべての行は 0 になります。
B. PATINDEX でワイルドカード文字を使用する
次の例では、ワイルドカードの % と _ を使用して、指定した文字列で任意の 1 文字と 'ure' が続くパターン 'en' が始まる位置を探します (インデックスは 1 から開始)。
SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');
以下に結果セットを示します。
------------
8
PATINDEX は LIKE と同様の機能を持つので、任意のワイルドカードを使用できます。 パターンを % で囲む必要はありません。 PATINDEX('a%', 'abc') は 1 を返し、PATINDEX('%a', 'cba') は 3 を返します。
LIKE とは異なり、PATINDEX は CHARINDEX と同様に位置を返します。
C. PATINDEX で COLLATE を使用する
次の例では、COLLATE 関数を使って、検索する式の照合順序を明示的に指定します。
USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN) ;
GO
D. 変数を使用してパターンを指定する
次の例では、変数を使用して pattern パラメーターに値を渡します。
USE AdventureWorks2012;
GO
DECLARE @MyValue varchar(10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
以下に結果セットを示します。
------------
22
関連項目
参照
[ ] (ワイルドカード - 一致する文字列) (Transact-SQL)
[^] (ワイルドカード - 一致しない文字列) (Transact-SQL)