PATINDEX (Transact-SQL)PATINDEX (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

すべて有効なテキストおよび文字データ型について、指定された式の中で、パターンが最初に現れる先頭位置を返します。パターンが見つからない場合は、0 を返します。Returns the starting position of the first occurrence of a pattern in a specified expression, or zeros if the pattern is not found, on all valid text and character data types.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

PATINDEX ( '%pattern%' , expression )  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

引数Arguments

patternpattern
検索するシーケンスを含む文字式です。Is a character expression that contains the sequence to be found. ワイルドカード文字も指定できますが、(先頭の文字または最後の文字を検索する場合を除き) pattern を % 文字で囲む必要があります。Wildcard characters can be used; however, the % character must come before and follow pattern (except when you search for first or last characters). pattern は文字列データ型に分類される式です。pattern is an expression of the character string data type category. pattern の上限は 8,000 文字です。pattern is limited to 8000 characters.

注意

従来の正規表現は、SQL ServerSQL Server でネイティブにサポートされていませんが、さまざまなワイルドカード表現を使用すると、同様の複雑なパターン マッチングを実現することができます。While traditional regular expressions are not natively supported in SQL ServerSQL Server, similar complex pattern matching can be achieved by using various wildcard expressions. ワイルドカード構文の詳細については、ドキュメント「文字列演算子」を参照してください。See the String Operators documentation for more detail on wildcard syntax.

式 (expression)expression
です。通常は、指定したパターンで検索する列です。Is an expression, typically a column that is searched for the specified pattern. は文字列データ型に分類されます。expression is of the character string data type category.

戻り値の型Return Types

expressionvarchar(max) または nvarchar(max) データ型の場合は bigint。それ以外の場合は intbigint if expression is of the varchar(max) or nvarchar(max) data types; otherwise int.

注釈Remarks

pattern またはが NULL の場合、PATINDEX は NULL を返します。If either pattern or expression is NULL, PATINDEX returns NULL.

PATINDEX の開始位置は 1 です。The starting position for PATINDEX is 1.

PATINDEX では、入力の照合順序に基づいて比較が行われます。PATINDEX performs comparisons based on the collation of the input. 指定した照合順序で比較を実行するには、COLLATE を使って入力に明示的な照合順序を適用できます。To perform a comparison in a specified collation, you can use COLLATE to apply an explicit collation to the input.

補助文字 (サロゲート ペア)Supplementary Characters (Surrogate Pairs)

SC の照合順序を使用する場合、戻り値では、expression パラメーターの UTF-16 サロゲート ペアが 1 文字としてカウントされます。When using SC collations, the return value will count any UTF-16 surrogate pairs in the expression parameter as a single character. 詳細については、「 Collation and Unicode Support」を参照してください。For more information, see Collation and Unicode Support.

0x0000 (char(0)) の Windows 照合順序で未定義の文字は、PATINDEX に含めることができません。0x0000 (char(0)) is an undefined character in Windows collations and cannot be included in PATINDEX.

Examples

A.A. 簡単な PATINDEX の例Simple PATINDEX example

次の例では、文字 ter の開始位置の短い文字列 (interesting data) を確認します。The following example checks a short character string (interesting data) for the starting location of the characters ter.

SELECT position = PATINDEX('%ter%', 'interesting data');  

結果セットは次のようになります。Here is the result set.

position
--------
3

B.B. PATINDEX でパターンを使用するUsing a pattern with PATINDEX

次の例では、AdventureWorks2012AdventureWorks2012 データベースの ensure テーブルにある DocumentSummary 列の特定の行で、パターン Document が始まる位置を検出します。The following example finds the position at which the pattern ensure starts in a specific row of the DocumentSummary column in the Document table in the AdventureWorks2012AdventureWorks2012 database.

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

結果セットは次のようになります。Here is the result set.

position
--------  
64  

検索する行を WHERE 句で限定しない場合は、クエリによりテーブル内のすべての行が返されます。パターンが見つかった行は 0 以外の値に、パターンが見つからなかったすべての行は 0 になります。If you do not restrict the rows to be searched by using a WHERE clause, the query returns all rows in the table and reports nonzero values for those rows in which the pattern was found, and zero for all rows in which the pattern was not found.

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

次の例では、ワイルドカードの % と _ を使用して、指定した文字列で任意の 1 文字と 'en' が続くパターン 'ure' が始まる位置を探します (インデックスは 1 から開始)。The following example uses % and _ wildcards to find the position at which the pattern 'en', followed by any one character and 'ure' starts in the specified string (index starts at 1):

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

結果セットは次のようになります。Here is the result set.

position
--------  
8  

PATINDEXLIKE と同様の機能を持つので、任意のワイルドカードを使用できます。PATINDEX works just like LIKE, so you can use any of the wildcards. パターンを % で囲む必要はありません。You do not have to enclose the pattern between percents. PATINDEX('a%', 'abc') は 1 を返し、PATINDEX('%a', 'cba') は 3 を返します。PATINDEX('a%', 'abc') returns 1 and PATINDEX('%a', 'cba') returns 3.

LIKE とは異なり、PATINDEXCHARINDEX と同様に位置を返します。Unlike LIKE, PATINDEX returns a position, similar to what CHARINDEX does.

D.D. PATINDEX で複雑なワイルドカード式を使用するUsing complex wildcard expressions with PATINDEX

次の例では、[^] 文字列演算子を使用して、数字、文字、またはスペース以外の文字の位置を検索します。The following example uses the [^] string operator to find the position of a character that is not a number, letter, or space.

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

結果セットは次のようになります。Here is the result set.

position
--------
33

E.E. PATINDEX で COLLATE を使用するUsing COLLATE with PATINDEX

次の例では、COLLATE 関数を使って、検索する式の照合順序を明示的に指定します。The following example uses the COLLATE function to explicitly specify the collation of the expression that is searched.

USE tempdb;  
GO  
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;  
GO  

結果セットは次のようになります。Here is the result set.

position
--------
9

F.F. 変数を使用してパターンを指定するUsing a variable to specify the pattern

次の例では、変数を使用して pattern パラメーターに値を渡します。The following example uses a variable to pass a value to the pattern parameter. この例では、AdventureWorks2012AdventureWorks2012 データベースを使用します。This example uses the AdventureWorks2012AdventureWorks2012 database.

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

結果セットは次のようになります。Here is the result set.

position
--------  
22

関連項目See Also

LIKE (Transact-SQL) LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)CHARINDEX (Transact-SQL)
LEN (Transact-SQL)LEN (Transact-SQL)
データ型 (Transact-SQL) Data Types (Transact-SQL)
文字列関数 (Transact-SQL) String Functions (Transact-SQL)
[ ] (ワイルドカード - 一致する文字列) (Transact-SQL) (Wildcard - Character(s) to Match) (Transact-SQL)
[^] (ワイルドカード - 一致しない文字列) (Transact-SQL) (Wildcard - Character(s) Not to Match) (Transact-SQL)
_ (ワイルドカード - 1 文字に一致) (Transact-SQL) _ (Wildcard - Match One Character) (Transact-SQL)
パーセント文字 (ワイルドカード - 一致する文字列) (Transact-SQL)Percent character (Wildcard - Character(s) to Match) (Transact-SQL)