CHARINDEX (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

この関数は、2 番目の文字式内の 1 つの文字式を検索して、見つかった場合には最初の式の開始位置を返します。

Transact-SQL 構文表記規則

構文

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )   

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

expressionToFind
検索するシーケンスを含む文字expressionToFind には 8000 文字の制限があります。

expressionToSearch
検索する文字式。

start_location
検索が開始される integer 型または bigint 型の式。 start_location を指定しない場合、または負の値や 0 を指定した場合は、expressionToSearch の先頭から検索が開始されます。

戻り値の型

expressionToSearchvarchar(max)nvarchar(max) 、または varbinary(max) データ型の場合は bigint、それ以外の場合は int

解説

expressionToFind または expressionToSearch のいずれかの式が Unicode データ型 (nchar または nvarchar) の場合で、他の式がそうでない場合、CHARINDEX 関数はその他の式を Unicode データ型に変換します。 CHARINDEX は、imagentext、または text データ型では使用できません。

expressionToFind 式または expressionToSearch のいずれかに NULL 値がある場合、CHARINDEX は NULL を返します。

CHARINDEX によって expressionToSearch 内で expressionToFind が見つからない場合、CHARINDEX は 0 を返します。

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

開始位置は 0 ではなく 1 を基準とします。

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

補助文字 (サロゲート ペア)

SC の照合順序を使用する場合、start_location と戻り値では、サロゲート ペアが 2 文字ではなく 1 文字としてカウントされます。 詳細については、「 Collation and Unicode Support」を参照してください。

A. 式の開始位置を返す

この例では、検索された文字列値の変数 @documentbicycle を検索します。

DECLARE @document VARCHAR(64);  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bicycle', @document);  
GO  

結果セットは次のようになります。

-----------   
48            

B. 特定の位置から検索する

この例では、オプションの start_location パラメーターを使用して、検索された文字列値の変数 @document の 5 文字目で vital の検索を開始します。

DECLARE @document VARCHAR(64);  
  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('vital', @document, 5);  
GO  

結果セットは次のようになります。

-----------   
16            
  
(1 row(s) affected)  

C. 存在しない式を検索する

この例では、CHARINDEX が expressionToSearchexpressionToFind を検出できない場合の結果セットを示します。

DECLARE @document VARCHAR(64);  
  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bike', @document);  
GO  

結果セットは次のようになります。

-----------
0
  
(1 row(s) affected)

この例では、大文字と小文字を区別して、検索された文字列 'This is a Test``' に含まれる文字列 'TEST' を検索します。

USE tempdb;  
GO  
--perform a case sensitive search  
SELECT CHARINDEX ( 'TEST',  
       'This is a Test'  
       COLLATE Latin1_General_CS_AS);  

結果セットは次のようになります。

-----------
0

この例では、大文字と小文字を区別して、'This is a Test' に含まれる文字列 'Test' を検索します。

  
USE tempdb;  
GO  
SELECT CHARINDEX ( 'Test',  
       'This is a Test'  
       COLLATE Latin1_General_CS_AS);  

結果セットは次のようになります。

-----------
11

この例では、大文字と小文字を区別せずに、'This is a Test' に含まれる文字列 'TEST' を検索します。

USE tempdb;  
GO  
SELECT CHARINDEX ( 'TEST',  
       'This is a Test'  
       COLLATE Latin1_General_CI_AS);  
GO  

結果セットは次のようになります。

-----------
11

例: Azure Synapse Analytics、Analytics Platform System (PDW)

F. 文字列式の先頭から検索する

この例では、This is a string の位置 1 (最初の文字) から開始して、文字列 This is a string に含まれる文字列 is の最初の位置を返します。

SELECT CHARINDEX('is', 'This is a string');  

結果セットは次のようになります。

---------
3

G. 最初の位置以外の位置から検索する

この例では、位置 4 (4 番目の文字) から開始して、文字列 This is a string に含まれる文字列 is の最初の位置を返します。

SELECT CHARINDEX('is', 'This is a string', 4);  

結果セットは次のようになります。

---------
 6

H. 文字列が見つからない場合の結果

この例では、CHARINDEX で文字列 string_pattern が検索文字列に見つからない場合の戻り値を示します。

SELECT TOP(1) CHARINDEX('at', 'This is a string') FROM dbo.DimCustomer;  

結果セットは次のようになります。

---------
0

関連項目

LEN (Transact-SQL)
PATINDEX (Transact-SQL)
文字列関数 (Transact-SQL)
+ (文字列連結) (Transact-SQL)
照合順序と Unicode のサポート