値を基準に部分文字列を特定し、文字列内でのその部分文字列の末尾位置を表す整数を返す汎用 SQL 関数です。
Synopsis
$FIND(string,substring[,position])
引数
string 検索するターゲット文字列。変数名、数値、文字列リテラル、または任意の有効な式を指定できます。
substring 検索する部分文字列。変数名、数値、文字列リテラル、または任意の有効な式を指定できます。
position オプション— 検索を開始するターゲット文字列内の位置。必ず正の整数を指定します。
概要
$FIND は、文字列内の部分文字列の末尾位置を示す整数を返します。$FIND は、substring を求めて string を検索します。substring が見つかると、$FINDsubstring に続く最初の文字の位置を整数で返します。substring が見つからなければ、$FIND は 0 の値を返します。
position オプションを使用して、検索の開始位置を指定できます。position 値が string 内の文字数よりも大きい場合、$FIND は 0 の値を返します。position が省略されている場合は、文字列位置 1 が既定です。position がゼロ、負の数、または非数値文字列の場合は、位置 1 が既定です。
この関数は、データ型 SMALLINT を返します。
以下の例では、string が文字列 "ABCDEFG" で、substring が文字列 "BCD" です。$FIND 関数は、"BCD" の次の文字 ("E") の位置を示す値 5 を返します。
SELECT DISTINCT $FIND('ABCDEG','BCD') AS SubPoint
FROM Sample.Person
以下の例は、数値 987654321 で数値 7 を検索し、substring の後の位置を示す 4 を返します。
SELECT DISTINCT $FIND(987654321,7) AS SubPoint
FROM Sample.Person
以下の例は、substring "AA" の最初のインスタンスの後の文字の位置を示す 3 を返します。
SELECT DISTINCT $FIND('AAAAAA','AA') AS SubPoint
FROM Sample.Person
以下の例では、$FIND は文字列に含まれていない部分文字列を検索します。結果はゼロ (0) を返します。
SELECT DISTINCT $FIND('AABBCCDD','AC') AS SubPoint
FROM Sample.Person
以下の例では、$FIND は 7 番目の文字から検索を開始します。この例は、7 文字目以降での "R" の出現箇所の次の位置を示す 14 を返します。
SELECT DISTINCT $FIND('EVERGREEN FOREST','R',7) AS SubPoint
FROM Sample.Person
以下の例では、$FIND は文字列の最後の文字の後から、検索を開始します。結果はゼロ (0) を返します。
SELECT DISTINCT $FIND('ABCDEFG','G',10) AS SubPoint
FROM Sample.Person
以下の埋め込み SQL の例は、1 よりも小さい position が 1 として処理されることを示しています。
   SET a="ABCDEFG"
   SET b="F"
   &sql(SELECT 
    $FIND(:a,:b),
    $FIND(:a,:b,1),
    $FIND(:a,:b,0),
    $FIND(:a,:b,-35)
   INTO :a1,:a2,:a3,:a4
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"The input string: ",a
     WRITE !,"Two-arg: ",a1
     WRITE !,"3rd arg 1: ",a2
     WRITE !,"3rd arg 0: ",a3
     WRITE !,"3rd arg negative: ",a4 }
以下の埋め込み SQL の例は、$FIND を使用して、Unicode 文字の pi、つまり $CHAR(960) が含まれる文字列を検索しています。最初の $FIND は、pi の次の文字の位置を示す 5 を返します。2 番目の $FIND は、4 文字目から検索を開始し、4 文字目が検索文字の pi に該当するため、同様に 5 を返します。3 番目の $FIND は 5 文字目から検索を開始し、5 文字目以降での pi の出現箇所の次の位置を示す 13 を返します。位置 12 が文字列の最後の文字であっても、位置 13 が返されることに注意してください。
   SET a="QT "_$CHAR(960)_" HONEY "_$CHAR(960)
   SET b=$CHAR(960)
   &sql(SELECT 
    $FIND(:a,:b),
    $FIND(:a,:b,4),
    $FIND(:a,:b,5)
   INTO :a1,:a2,:a3
   FROM Sample.Person)
   IF SQLCODE'=0 {
     WRITE !,"Error code ",SQLCODE }
   ELSE {
     WRITE !,"The input string: ",a
     WRITE !,"From beginning: ",a1
     WRITE !,"From position 4: ",a2
     WRITE !,"From position 5: ",a3 }
メモ
$FIND、$EXTRACT、$PIECE、および $LIST
$FIND$EXTRACT$LENGTH、および $PIECE 関数は、標準の文字列を操作します。さまざまな $LIST 関数は、エンコードされた文字列を操作します。この文字列は、標準の文字列とは互換性がありません。唯一の例外は、$LISTGET 関数と、引数が 1 つおよび 2 つの形式の $LIST 関数です。これらの関数は、入力としてエンコードされた文字の文字列を受け取り、単一要素値を標準文字の文字列として出力します。
関連項目