Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$FIND

文字列内の部分文字列の終了位置を返す文字列関数です。オプションで検索開始位置を指定できます。

Synopsis

$FIND(string,substring[,start])

引数

string 検索するターゲット文字列。変数名、数値、文字列リテラル、または任意の有効な式を指定できます。
substring 検索する部分文字列。変数名、数値、文字列リテラル、または任意の有効な式を指定できます。
start オプション — 正の整数で指定する、部分文字列検索の開始地点。string の最初から文字数がカウントされ、カウントは 1 を基準とします。string の先頭から検索するには、この引数を省略するか、0 または 1 の start を指定します。負の数値、空の文字列、または数値以外の値は 0 として処理されます。start を NULL に指定すると、$FIND は <null> を返します。

概要

$FIND は、文字列内の部分文字列の末尾位置を示す整数を返します。$FIND は、substring を求めて string を検索します。substring が見つかると、$FINDsubstring に続く最初の文字の位置を整数で返します。substring が見つからなければ、$FIND は 0 の値を返します。

start オプションを使用して、検索の開始位置を指定できます。start 値が string 内の文字数よりも大きい場合、$FIND は 0 の値を返します。start が省略されている場合は、文字列位置 1 が既定です。start がゼロ、負の数、または非数値文字列の場合は、位置 1 が既定です。

$FIND は、大文字と小文字を区別します。大小文字変換関数の 1 つを使用して、文字列の大文字と小文字のインスタンスをどちらも配置します。

この関数は、データ型 SMALLINT を返します。

$FIND、POSITION、CHARINDEX、および INSTR

$FINDPOSITIONCHARINDEX、および INSTR はすべて文字列内の指定された部分文字列を検索し、最初に一致した位置に対応する整数値を返します。$FIND は、最初に一致した部分文字列の次の文字の整数位置を返します。CHARINDEXPOSITION、および 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 が文字列 “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

以下の埋め込み SQL の例は、1 よりも小さい start が 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)
   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 が返されることに注意してください。

  IF $SYSTEM.Version.IsUnicode() {
   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)
   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 }
  }
  ELSE {WRITE "This example requires a Unicode installation of Caché"}

関連項目

FeedbackOpens in a new tab