INSTR
構文
目的
INSTR
ファンクションは、string
のsubstring
を検索します。検索操作では、一致する値が見つかるか、または検索するサブストリングがなくなるまで、substring
引数と、string
に含まれる同じ長さのサブストリングを比較して等しいものを検索します。string
の中で逐次比較される各サブストリングは、その前に比較したサブストリングの最初の文字の1つ右(順方向検索)または左(逆方向検索)から始まります。substring
と等しいサブストリングが見つかった場合は、そのサブストリングの先頭文字の位置を示す整数が戻されます。該当するサブストリングが見つからない場合は0(ゼロ)が戻されます。
-
position
は、Oracle Databaseが検索を開始するstring
の文字の位置を示す0(ゼロ)以外の整数です。つまり、substring
と比較する最初のサブストリングの先頭文字の位置です。position
が負の場合、Oracleはstring
の終わりから逆方向にカウントし、結果位置から逆方向に検索します。 -
occurrence
は、string
の中で何番目に現れるsubstring
を検索するかを示す整数です。occurrence
の値は正である必要があります。occurrence
が1より大きい場合は最初の一致では位置を戻さずに、occurrence
番目の一致が見つかるまで、前述した方法でstring
に含まれるサブストリングの逐次比較を続行します。
INSTR
は、文字列の先頭文字の位置を1として、入力文字セットによって定義された文字の位置を受け入れ、それに該当する位置を戻します。INSTRB
には、文字でなくバイトを使用します。INSTRC
は、完全なUnicodeキャラクタを使用します。INSTR2
は、UCS2コードポイントを使用します。INSTR4
には、UCS4コード・ポイントを使用します。
string
は、CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
、CLOB
またはNCLOB
データ型です。例外は、INSTRC
、INSTR2
およびINSTR4
であり、これらでは、string
をCLOB
およびNCLOB
のいずれにもできません。
substring
は、CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
、CLOB
またはNCLOB
データ型です。
戻り値のデータ型はNUMBER
です。
position
およびoccurrence
は、NUMBER
データ型か、または暗黙的にNUMBER
に変換可能な任意のデータ型で、整数に変換できる必要があります。position
およびoccurrence
のデフォルト値は1です。この場合、Oracleはstring
の最初の文字から検索を開始します。検索対象はsubstring
が最初に現れる位置です。戻り値は、position
の値にかかわらず、string
の先頭を基準にします。
関連項目:
-
文字長の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
文字長の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
-
暗黙的な変換の詳細は、表2-8を参照してください。
-
substring
引数とstring
のサブストリングを比較するためにINSTR
ファンクションで使用される照合を定義する照合決定ルールは、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録Cを参照してください。
例
次の例では、文字列CORPORATE
FLOOR
で文字列OR
の検索を3番目の文字から開始します。文字列CORPORATE
FLOOR
で2回目に現れるOR
の開始位置を戻します。
SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) "Instring" FROM DUAL; Instring ---------- 14
次の例では、最後の文字から、最後から3番目の文字まで、つまりFLOOR
の最初のO
まで逆方向にカウントします。次に、2回目に現れる「OR」
を逆方向に検索し、2回目に現れるこの文字列が、検索文字列の2番目の文字で始まることを認識します。
SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) "Reversed Instring" FROM DUAL; Reversed Instring ----------------- 2
次の例では、データベース文字セットがダブルバイトの場合を想定しています。
SELECT INSTRB('CORPORATE FLOOR','OR',5,2) "Instring in bytes" FROM DUAL; Instring in bytes ----------------- 27