Oracleでは、INSTR()
関数は、指定された文字列内の部分文字列を検索し、この部分文字列の最初の文字の位置を示す整数を返します。サブストリングが見つからない場合、関数は0
を返します 。
INSTR()
少なくとも2つの引数が必要です。文字列、および部分文字列。また、オプションの3番目と4番目の引数を受け入れて、検索する開始位置と検索するオカレンスを指定できます。
INSTR()
関数のグループと考えることもできます。 5つの別々の機能があります。 INSTR()
、INSTRB()
、INSTRC()
、INSTR2()
、およびINSTR4()
。各関数は、異なる方法で長さを計算します。
構文
構文は次のようになります:
{ INSTR
| INSTRB
| INSTRC
| INSTR2
| INSTR4
}
(string , substring [, position [, occurrence ] ])
string
検索する文字列、substring
見つけるサブストリング、position
は部分文字列の開始位置であり、occurrence
見つけるべきオカレンスです。
関数は次のように長さを計算します:
関数 | を使用して長さを計算します… |
---|---|
INSTR() | 入力文字セットで定義された文字で、文字列の最初の文字の位置は1です。 |
INSTRB() | バイト |
INSTRC() | Unicodeの完全な文字 |
INSTR2() | UCS2コードポイント |
INSTR4() | UCS4コードポイント |
例
基本的な例は次のとおりです。
SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;
結果:
5
INSTRB()
との比較
この例は、使用している特定の関数と関連する文字セットに応じて、結果がどのように異なるかを示しています。
この場合、INSTR()
を比較します INSTRB()
を使用 :
SELECT
INSTR('Böyük yağlı pişik', 'yağlı') AS INSTR,
INSTRB('Böyük yağlı pişik', 'yağlı') AS INSTRB
FROM DUAL;
結果:
INSTR INSTRB ________ _________ 7 9
2つの関数が2つの異なる結果を返したことがわかります。これは、この文字列の一部の文字が2バイトを使用しているためです。
INSTR()
関数は入力文字セットで定義された位置を返しますが、INSTRB()
関数は、バイトに基づいて位置を返します 。
元の文字列に戻ると、結果は2つの関数間で同じです。
SELECT
INSTR('Big fat cat', 'fat') AS INSTR,
INSTRB('Big fat cat', 'fat') AS INSTRB
FROM DUAL;
結果:
INSTR INSTRB ________ _________ 5 5
これは、この文字列が1文字あたり1バイトしか使用しないため、バイト単位の長さが文字数と同じであるためです。
開始位置
検索を開始する位置を指定する例を次に示します。
SELECT INSTR('That fat cat', 'at', 8)
FROM DUAL;
結果:
11
この場合、検索は最初の2回の出現後の位置8から開始されます。したがって、3番目の一致の位置を取得します。
発生する場所を指定する
検索するオカレンスを指定する例を次に示します。
SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;
結果:
7
この場合、位置1から開始し、その開始位置から2番目のオカレンスを検索しました。
ここでも同じですが、今回はoccurrence
の3つの異なる値を比較します 引数:
SELECT
INSTR('That fat cat', 'at', 1, 1) AS "o1",
INSTR('That fat cat', 'at', 1, 2) AS "o2",
INSTR('That fat cat', 'at', 1, 3) AS "o3"
FROM DUAL;
結果:
o1 o2 o3 _____ _____ _____ 3 7 11
ただし、position
引数:
SELECT
INSTR('That fat cat', 'at', 5, 1) AS "o1",
INSTR('That fat cat', 'at', 5, 2) AS "o2",
INSTR('That fat cat', 'at', 5, 3) AS "o3"
FROM DUAL;
結果:
o1 o2 o3 _____ _____ _____ 7 11 0
この場合、最初のオカレンスの位置は開始位置の前にあるため、取得できません。 0
も取得します 開始位置に基づいて、3回目の発生がないため、3番目の列に表示されます。
ネガティブポジション
位置に負の値を指定すると、開始位置が文字列の末尾から逆方向にカウントされ、Oracleはその位置から逆方向に検索します。
SELECT INSTR('That fat cat', 'at', -3)
FROM DUAL;
結果:
7
そして、指定されたオカレンスは、その位置から逆方向にカウントされます:
SELECT INSTR('That fat cat', 'at', -3, 2)
FROM DUAL;
結果:
3
ヌル引数
引数のいずれか(またはすべて)がnull
の場合 、結果はnull
です :
SET NULL 'null';
SELECT
INSTR(null, 'f', 1, 1) AS r1,
INSTR('Coffee', null, 1, 1) AS r2,
INSTR('Coffee', 'f', null, 1) AS r3,
INSTR('Coffee', 'f', 1, null) AS r4
FROM DUAL;
結果:
R1 R2 R3 R4 _______ _______ _______ _______ null null null null
デフォルトでは、SQLclおよびSQL * Plusは、null
の場合は常に空白を返します。 SQL SELECT
の結果として発生します 声明。
ただし、SET NULL
は使用できます 返される別の文字列を指定します。ここでは、文字列null
を指定しました 返却する必要があります。
引数の数が正しくありません
INSTR()
の呼び出し 引数を渡さないとエラーが発生します:
SELECT INSTR()
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT INSTR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
また、あまりにも多くの引数を渡すと、エラーが発生します:
SELECT INSTR('Big fat cat', 'at', 1, 2, 3)
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT INSTR('Big fat cat', 'at', 1, 2, 3) FROM DUAL Error at Command Line : 1 Column : 38 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: