CHARINDEX (Transact-SQL)
expression2 で expression1 を検索し、見つかった場合は開始位置を返します。検索は start_location から開始されます。
構文
CHARINDEX ( expression1 ,expression2 [ , start_location ] )
引数
expression1
検索対象であるシーケンスを含む文字式を指定します。expression1 の上限は 8,000 文字です。expression2
検索する文字式です。start_location
検索が開始される整数型または bigint 型の式を指定します。start_location を指定しない場合、または負の値や 0 を指定した場合は、expression2 の先頭から検索が開始されます。
戻り値の型
expression2 のデータ型が varchar(max)、nvarchar(max)、または varbinary(max) の場合は bigint になります。それ以外の場合は int になります。
説明
expression1 または expression2 のいずれかが Unicode データ型 (nvarchar または nchar) で、もう一方がこの型でない場合、もう一方も Unicode データ型に変換されます。CHARINDEX を text、ntext、および image データ型と共に使用することはできません。
expression1 または expression2 のいずれかが NULL の場合、CHARINDEX ではデータベース互換性レベルが 70 以上のときに NULL が返されます。データベースの互換性レベルが 65 以下の場合、CHARINDEX では expression1 と expression2 が両方とも NULL のときだけ NULL が返されます。
expression2 から expression1 を検出できない場合、CHARINDEX は 0 を返します。
CHARINDEX は、入力の照合順序に基づいて比較を行います。特定の照合順序で比較を行うには、COLLATE を使用して、入力に明示的な照合順序を適用します。
開始位置は 0 ではなく 1 を基準とします。
例
次の例は、Document テーブルの DocumentSummary 列で bicycle という文字シーケンスが開始する位置を返します。
DECLARE @document varchar(64)
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.'
SELECT CHARINDEX('bicycle', @document)
GO
以下に結果セットを示します。
-----------
48
次の例では、オプションの start_location パラメータを使用して、DocumentSummary 列の 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)
次の例では、expression2 から expression1 が検出できない場合の結果セットを示します。
DECLARE @document varchar(64)
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.'
SELECT CHARINDEX('bike', @document)
GO
以下に結果セットを示します。
-----------
0
(1 row(s) affected)
次の例では、大文字と小文字を区別して、'Das jst ein Test' に含まれる文字列 'TEST' を検索します。
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS)
以下に結果セットを示します。
-----------
0
次の例では、大文字と小文字を区別して、'Das jst ein Test' に含まれる文字列 'Test' を検索します。
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS)
以下に結果セットを示します。
-----------
13
次の例では、大文字と小文字を区別せずに、'Das jst ein Test' で文字列 'TEST' を検索します。
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'Das ist ein Test'
COLLATE Latin1_General_CI_AS)
GO
以下に結果セットを示します。
-----------
13