Skip to main content

INSTR (SQL)

文字列内の部分文字列の位置を返す文字列関数です。オプションで、検索開始位置と、その位置から数えて何個目の部分文字列かを指定できます。

構文

INSTR(string,substring[,start[,occurrence]])

説明

INSTR は、string 内で substring を検索し、substring の最初の文字の位置を返します。string の先頭から何文字目であるかを示す整数として位置が返されます。substring が見つからない場合、0 (ゼロ) が返されます。いずれかの引数に NULL 値を渡すと、INSTR は NULL を返します。

INSTR では、部分文字列の検索の開始位置として start を指定できます。また、その開始位置から数えて部分文字列の occurrence を指定することもできます。

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

この関数は、ObjectScript から INSTR()Opens in a new tab メソッド・コールを使用して呼び出すこともできます。

  WRITE $SYSTEM.SQL.Functions.INSTR("The broken brown briefcase","br",6,2)

INSTR、CHARINDEX、POSITION、および $FIND

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

部分文字列を検索する関数のリストは、"文字列操作" を参照してください。

引数

string

substring の検索が行われる文字列式。この表現は、列の名前、文字列リテラル、または他のスカラ関数の結果となります。基盤となったデータ型は、任意の文字型 (CHAR や VARCHAR2 など) で示すことができます。

substring

string 内での存在が想定される部分文字列。

start

正の整数で指定される、部分文字列検索の開始地点を示す引数 (オプション)。string の最初から文字数がカウントされ、カウントは 1 を基準とします。string の先頭から検索するには、この引数を省略するか、1 の start を指定します。start 値に 0、空文字列、NULL、または数値以外の値を指定すると、INSTR は 0 を返します。start を負の数に指定すると、INSTR は <null> を返します。

occurrence

start 位置から検索する際にどの substring を返すかを指定するゼロ以外の整数 (オプション)。既定では、最初に検出された部分文字列の位置が返されます。

INSTR は、INTEGER データ型を返します。

以下の例は、“b” が文字列の 11 番目の文字であるため 11 を返します。

SELECT INSTR('The quick brown fox','b',1) AS PosInt

以下の例は、Sample.Person テーブル内の各名前に対する姓 (苗字) の長さを返します。残りの名前フィールドから姓を区切るために使用するコンマを配置し、次にその位置から 1 を減算します。

SELECT Name,
INSTR(Name,',',1)-1 AS LNameLen
FROM Sample.Person

以下の例では、Sample.Person テーブル内の各名前にある文字 “B” の最初のインスタンスの位置を返します。INSTR は大文字と小文字を区別するため、%SQLUPPER 関数を使用して、検索を実行する前にすべての名前の値を大文字に変換します。%SQLUPPER は文字列の最初に空白スペースを加えるため、この例では 1 を減算して、実際の文字位置を取得します。指定した文字列を配置できないと、検索はゼロ (0) を返します。この例では、1 を減算しているので、これらの検索で表示される値は -1 です。

SELECT Name,
INSTR(%SQLUPPER(Name),'B',1)-1 AS BPos
FROM Sample.Person

関連項目

FeedbackOpens in a new tab