CHARINDEX (SQL)
構文
CHARINDEX(substring,string[,start])
概要
CHARINDEX は部分文字列を検索します。一致が見つかった場合、最初に一致した部分文字列の開始位置を返します。先頭を 1 としてカウントされます。一致する部分文字列がない場合、CHARINDEX は 0 を返します。
空の文字列は文字列値です。そのため、文字列引数の値には空の文字列も指定できます。start 引数は空の文字列値を 0 として処理します。ただし、ObjectScript の空文字列は、NULL として InterSystems SQL に渡されることに注意してください。
InterSystems SQL では、NULL は文字列値ではありません。そのため、CHARINDEX 文字列引数のいずれかに NULL を指定すると、NULL が返されます。
CHARINDEX では string 引数または substring 引数に %Stream.GlobalCharacter field を使用することはできません。これを実行しようとすると、SQLCODE -37 エラーが生成されます。SUBSTRING 関数を使用して、%Stream.GlobalCharacter フィールドを取得して %String データ型の値を返し、CHARINDEX で使用できます。
CHARINDEX は、大文字と小文字を区別します。大小文字変換関数の 1 つを使用して、文字列の大文字と小文字のインスタンスをどちらも配置します。
この関数には Transact-SQL 実装との互換性があります。
CHARINDEX、POSITION、$FIND、および INSTR
CHARINDEX、POSITION、$FIND、および INSTR はすべて文字列内の指定された部分文字列を検索し、最初に一致した位置に対応する整数位置を返します。CHARINDEX、POSITION、および INSTR は、一致した部分文字列の最初の文字の整数位置を返します。$FIND は、最初に一致した部分文字列の次の文字の整数位置を返します。CHARINDEX、$FIND、および INSTR では、部分文字列の検索を開始する位置を指定できます。INSTR では、その開始位置から数えて何個目の部分文字列かを指定することもできます。
以下に、4 つの関数にすべてのオプション引数を指定した例を示します。string および substring の位置はそれぞれの関数で異なります。
SELECT POSITION('br' IN 'The broken brown briefcase') AS Position,
CHARINDEX('br','The broken brown briefcase',6) AS Charindex,
$FIND('The broken brown briefcase','br',6) AS Find,
INSTR('The broken brown briefcase','br',6,2) AS Inst
部分文字列を検索する関数のリストは、"文字列操作" を参照してください。
引数
substring
string 内で検索する部分文字列。
string
部分文字列検索の検索対象となる文字列式。
起動
正の整数で指定する、部分文字列検索の開始地点を示す引数 (オプション)。string の最初から文字数がカウントされ、カウントは 1 を基準とします。string の先頭から検索するには、この引数を省略するか、0 または 1 の start を指定します。負の数値、空の文字列、NULL、または数値以外の値は 0 として処理されます。
CHARINDEX は、INTEGER データ型を返します。
例
以下の例は、ヌクレオチド配列で部分文字列 TTAGGG の最初の出現箇所を検索します。検索対象となる文字列内の、この部分文字列の文字位置 7 を返します。
SELECT CHARINDEX('TTAGGG','TTAGTCTTAGGGACATTAGGG')
以下の例は、部分文字列 'Fred' を含むすべての Name フィールドの値を検索します。
SELECT Name
FROM Sample.Person
WHERE CHARINDEX('Fred',Name)>0
以下の例では、SUBSTRING を使用して、DNA ヌクレオチド配列が含まれる %Stream.GlobalCharacter フィールドの最初の 1000 文字で部分文字列 TTAGGG の最初の出現箇所を CHARINDEX で検索できます。
SELECT CHARINDEX('TTAGGG',SUBSTRING(DNASeq,1,1000)) FROM Sample.DNASequences
以下の例は、最初から数えて 10 文字目以降で部分文字列を一致させます。
SELECT CHARINDEX('Re','Reduce, Reuse, Recycle',10)
これは 16 を返します。
以下の例は、文字列の長さを超えて start 位置を指定しています。
SELECT CHARINDEX('Re','Reduce, Reuse, Recycle',99)
これは 0 を返します。
以下の例は、CHARINDEX が他の文字列値と同様に空の文字列 ('') を処理することを示しています。
SELECT CHARINDEX('','Fred Astare'),
CHARINDEX('A',''),
CHARINDEX('','')
上記の例では、最初と 2 番目の CHARINDEX 関数は 0 (一致しない) を返します。3 番目の CHARINDEX 関数では、空文字列が位置 1 の空文字列に一致するため 1 が返されます。
以下の例は、CHARINDEX が文字列値として NULL を処理しないことを示します。いずれかの文字列に NULL を指定すると、常に NULL が返されます。
SELECT CHARINDEX(NULL,'Fred Astare'),
CHARINDEX('A',NULL),
CHARINDEX(NULL,NULL)