PATINDEX (Transact-SQL)

すべて有効なテキスト型と文字型で指定された式の中で、パターンが最初に現れる先頭位置を返します。パターンが見つからない場合は、0 を返します。詳細については、「検索条件のパターン照合」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

PATINDEX ( '%pattern%' , expression )

引数

  • 'pattern'
    検索対象であるシーケンスを含む文字式を指定します。ワイルドカード文字も使用できます。ただし、pattern の前後に % 文字が必要です (先頭の文字または末尾の文字を検索する場合は除く)。

  • expression
    を指定します。通常は、指定したパターンで検索する列を指定します。expression は文字列データ型に分類されます。

戻り値の型

expression のデータ型が varchar(max) または nvarchar(max) の場合は bigint になります。それ以外の場合は int になります。

説明

pattern または expression が NULL の場合、PATINDEX は NULL を返します。

PATINDEX では、入力の照合順序に基づいて比較が行われます。特定の照合順序で比較を行うには、COLLATE を使用して、入力に明示的な照合順序を適用します。

0x0000 (char(0)) は、Windows 照合順序の未定義の文字で、PATINDEX に含めることはできません。

使用例

A. PATINDEX でパターンを使用する

次の例では、Document テーブルにある DocumentSummary 列の特定の行で、パターン ensure が始まる位置を検出します。

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

以下に結果セットを示します。

-----------

64

(1 row(s) affected)

検索する行を WHERE 句で限定しない場合は、クエリによりテーブル内のすべての行が返されます。パターンが見つかった行は 0 以外の値に、パターンが見つからなかったすべての行は 0 になります。

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

次の例では、Document テーブル内にある DocumentSummary 列の特定の行で、パターン en_ure が始まる位置を、ワイルドカード文字を使用して検索します。アンダースコアは任意の文字を表すワイルドカードです。

USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
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

D. 変数を使用してパターンを指定する

次の例では、変数を使用して pattern パラメーターに値を渡します。

USE AdventureWorks2008R2; 
GO
DECLARE @MyValue varchar(10) = 'safety'; 

SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) 
FROM Production.Document
WHERE DocumentNode = 0x7B40;

以下に結果セットを示します。

------------

22