PATINDEX (Transact-SQL)
すべて有効なテキスト型と文字型で指定された式の中で、パターンが最初に現れる先頭位置を返します。パターンが見つからない場合は、0 を返します。詳細については、「検索条件のパターン照合」を参照してください。
構文
PATINDEX ( '%pattern%' , expression )
引数
pattern
リテラル文字列を指定します。ワイルドカード文字も指定できますが、先頭の文字または最後の文字を検索する場合を除き、pattern を % 文字で囲む必要があります。pattern は文字列データ型に分類される式です。expression
式を指定します。通常は、指定したパターンで検索する列を指定します。expression は文字列データ型に分類されます。
戻り値の型
expression のデータ型が varchar(max) または nvarchar(max) データ型の場合は bigint になります。それ以外の場合は int になります。
説明
pattern または expression のいずれかが NULL の場合、PATINDEX ではデータベース互換性レベルが 70 のときに NULL が返されます。データベースの互換性レベルが 65 以下の場合、PATINDEX では pattern と expression が両方とも NULL のときだけ NULL が返されます。
PATINDEX では、入力の照合順序に基づいて比較が行われます。指定した照合順序で比較を実行するには、COLLATE を使って入力に明示的な照合順序を適用できます。
例
A. PATINDEX でパターンを使用する
次の例では、Document テーブルにある DocumentSummary 列の特定の行で、パターン ensure が始まる位置を検出します。
USE AdventureWorks;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO
以下に結果セットを示します。
-----------
64
(1 row(s) affected)
検索する行を WHERE 句で限定しない場合は、クエリによりテーブル内のすべての行が返されます。パターンが見つかった行は 0 以外の値に、パターンが見つからなかったすべての行は 0 になります。
B. PATINDEX でワイルドカード文字を使用する
次の例では、Document テーブル内にある DocumentSummary 列の特定の行で、パターン en_ure が始まる位置を、ワイルドカード文字を使用して検索します。アンダースコアは任意の文字を表すワイルドカードです。
USE AdventureWorks;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO
以下に結果セットを示します。
------------
64
(1 row(s) affected)
検索する行を限定しない場合、クエリではテーブル内のすべての行が返され、パターンが見つかった行については 0 以外の値が返されます。
C. PATINDEX で COLLATE を使用する
次の例では、COLLATE 関数を使って、検索する式の照合順序を明示的に指定します。
USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN) ;
GO