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
参照
関連項目
データ型 (Transact-SQL)
文字列関数 (Transact-SQL)
[ ] (ワイルドカード - 一致する文字列) (Transact-SQL)
[^] (ワイルドカード - 一致しない文字列) (Transact-SQL)
_ (ワイルドカード - 1 文字に一致) (Transact-SQL)
% (ワイルドカード - 一致する文字列 (Transact-SQL)