CHARINDEX (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
この関数は、2 番目の文字式内の 1 つの文字式を検索して、見つかった場合には最初の式の開始位置を返します。
構文
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
引数
expressionToFind
検索するシーケンスを含む文字式。 expressionToFind には 8000 文字の制限があります。
expressionToSearch
検索する文字式。
start_location
検索が開始される integer 型または bigint 型の式。 start_location を指定しない場合、または負の値や 0 を指定した場合は、expressionToSearch の先頭から検索が開始されます。
戻り値の型
expressionToSearch が varchar(max) 、nvarchar(max) 、または varbinary(max) データ型の場合は bigint、それ以外の場合は int。
解説
expressionToFind または expressionToSearch のいずれかの式が Unicode データ型 (nchar または nvarchar) の場合で、他の式がそうでない場合、CHARINDEX 関数はその他の式を Unicode データ型に変換します。 CHARINDEX は、image、ntext、または 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. 式の開始位置を返す
この例では、検索された文字列値の変数 @document
で bicycle
を検索します。
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 が expressionToSearch で expressionToFind を検出できない場合の結果セットを示します。
DECLARE @document VARCHAR(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO
結果セットは次のとおりです。
-----------
0
(1 row(s) affected)
D. 大文字小文字を区別する検索を実行する
この例では、大文字と小文字を区別して、検索された文字列 '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
E. 大文字小文字を区別しない検索を実行する
この例では、大文字と小文字を区別せずに、'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 のサポート