$FIND (SQL)
構文
$FIND(string,substring[,start])
説明
$FIND は、文字列内の部分文字列の末尾位置を示す整数を返します。$FIND は、substring を求めて string を検索します。substring が見つかると、$FIND はsubstring に続く最初の文字の位置を整数で返します。substring が見つからなければ、$FIND は 0 の値を返します。
start オプションを使用して、検索の開始位置を指定できます。start 値が string 内の文字数よりも大きい場合、$FIND は 0 の値を返します。start が省略されている場合は、文字列位置 1 が既定です。start がゼロ、負の数、または非数値文字列の場合は、位置 1 が既定です。
$FIND は、大文字と小文字を区別します。大小文字変換関数の 1 つを使用して、文字列の大文字と小文字のインスタンスをどちらも配置します。
$FIND、POSITION、CHARINDEX、および INSTR
$FIND、POSITION、CHARINDEX、および INSTR はすべて文字列内の指定された部分文字列を検索し、最初に一致した位置に対応する整数値を返します。$FIND は、最初に一致した部分文字列の次の文字の整数位置を返します。CHARINDEX、POSITION、および INSTR は、一致した部分文字列の最初の文字の整数位置を返します。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
部分文字列を検索する関数のリストは、"文字列操作" を参照してください。
引数
string
検索するターゲット文字列。変数名、数値、文字列リテラル、または任意の有効な式を指定できます。
substring
検索する部分文字列。変数名、数値、文字列リテラル、または任意の有効な式を指定できます。
起動
正の整数で指定する、部分文字列検索の開始地点を示す引数 (オプション)。string の最初から文字数がカウントされ、カウントは 1 を基準とします。string の先頭から検索するには、この引数を省略するか、0 または 1 の start を指定します。負の数値、空の文字列、または数値以外の値は 0 として処理されます。start を NULL に指定すると、$FIND は <null> を返します。
$FIND は、SMALLINT データ型を返します。
例
以下の例では、string が文字列 “ABCDEFG” で、substring が文字列 “BCD” です。$FIND 関数は、“BCD” の次の文字 (“E”) の位置を示す値 5 を返します。
SELECT $FIND('ABCDEG','BCD') AS SubPoint
以下の例は、数値 987654321 で数字 7 を検索し、substring の後の位置を示す 4 を返します。
SELECT $FIND(987654321,7) AS SubPoint
以下の例は、substring “AA”: の最初のインスタンスの後の文字の位置を示す 3 を返します。
SELECT $FIND('AAAAAA','AA') AS SubPoint
以下の例では、$FIND は文字列に含まれていない部分文字列を検索します。結果はゼロ (0) を返します。
SELECT $FIND('AABBCCDD','AC') AS SubPoint
以下の例では、$FIND は 7 番目の文字から検索を開始します。この例は、7 文字目以降での “R” の出現箇所の次の位置を示す 14 を返します。
SELECT $FIND('EVERGREEN FOREST','R',7) AS SubPoint
以下の例では、$FIND は文字列の最後の文字の後から、検索を開始します。結果はゼロ (0) を返します。
SELECT $FIND('ABCDEFG','G',10) AS SubPoint
以下の例は、1 よりも小さい start が 1 として処理されることを示しています。
SELECT
$FIND("ABCDEFG","F"),
$FIND("ABCDEFG","F",1),
$FIND("ABCDEFG","F",0),
$FIND("ABCDEFG","F",-35)
以下の例は、$FIND を使用して、Unicode 文字の pi、つまり $CHAR(960) が含まれる文字列を検索しています。最初の $FIND は、pi の次の文字の位置を示す 5 を返します。2 番目の $FIND は、4 文字目から検索を開始し、4 文字目が検索文字の pi に該当するため、同様に 5 を返します。3 番目の $FIND は 5 文字目から検索を開始し、5 文字目以降での pi の出現箇所の次の位置を示す 13 を返します。位置 12 が文字列の最後の文字であっても、位置 13 が返されることに注意してください。
SELECT
$FIND("QT "_$CHAR(960)_" HONEY "_$CHAR(960),$CHAR(960)),
$FIND("QT "_$CHAR(960)_" HONEY "_$CHAR(960),$CHAR(960),4),
$FIND("QT "_$CHAR(960)_" HONEY "_$CHAR(960),$CHAR(960),5)