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 には 8,000 文字の制限があります。
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
は、画像、ntext、またはテキストのデータ型では使用できません。
expressionToFind 式または expressionToSearch 式にNULL
値がある場合、CHARINDEX
はNULL
を返します。
expressionToSearch 内CHARINDEX
expressionToFind が見つからない場合、CHARINDEX
は0
を返します。
CHARINDEX
は、入力照合順序に基づいて比較を実行します。 指定した照合順序で比較を実行するには、 COLLATE
を使用して明示的な照合順序を入力に適用します。
開始位置は 0 ではなく 1 を基準とします。
0x0000
(char(0)) は Windows 照合順序では未定義の文字であり、 CHARINDEX
に含めることはできません。
補助文字 (サロゲート ペア)
補助文字 (SC) 照合順序を使用する場合、 start_location と戻り値の両方のサロゲート ペアは 2 文字ではなく 1 文字としてカウントされます。 詳細については、「 照合順序と Unicode のサポート」を参照してください。
例
A. 式の開始位置を返します。
この例では、検索された文字列値の変数 bicycle
で @document
を検索します。
DECLARE @document AS VARCHAR (64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO
結果セットは次のとおりです。
-----------
48
B. 特定の位置から検索する
この例では、オプションの start_location パラメーターを使用して、検索された文字列値の変数 vital
の 5 文字目で @document
の検索を開始します。
DECLARE @document AS VARCHAR (64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO
結果セットは次のとおりです。
-----------
16
C: 存在しない式を検索する
この例では、expressionToSearch 内CHARINDEX
expressionToFind が見つからない場合の結果セットを示します。
DECLARE @document AS VARCHAR (64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO
結果セットは次のとおりです。
-----------
0
D. 大文字と小文字を区別する検索を実行する
この例では、大文字と小文字を区別して、検索された文字列 TEST
に含まれる文字列 This is a Test
を検索します。
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX('TEST', 'This is a Test' COLLATE Latin1_General_CS_AS);
結果セットは次のとおりです。
-----------
0
この例では、大文字と小文字を区別して、検索された文字列 Test
に含まれる文字列 This is a 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. 文字列式の先頭から検索する
この例では、is
の位置 1 (最初の文字) から開始して、文字列 This is a string
に含まれる文字列 This is a string
の最初の位置を返します。
SELECT CHARINDEX('is', 'This is a string');
結果セットは次のとおりです。
---------
3
G. 最初の位置以外の位置から検索する
この例では、位置 4 (4 番目の文字) から開始して、文字列 is
に含まれる文字列 This is a string
の最初の位置を返します。
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