部分文字列の出現位置を検索する

syntax

INSTR ( string , substring [, position [, occurrence]] )
INSTRB ( string , substring [, position [, occurrence]] )
return [ number ]

parameter

string対象の文字列
substring検索する文字列
position 正の場合検索対象文字列の検索開始位置(1〜)default 1
position 負の場合文字の末尾から逆向きに数えた位置
position 0 の場合(要注意)常に未検出(0)を戻す
occurrence取り出すまでの検知回数default 1=最初

return

  • 部分文字列が出現した位置(1オリジン)

avail

  • SQL および PL/SQL の両方で使用可能。

INSTR、INSTRB 関数の内容

文字列 string 中の 検索文字列 substring を検索し、その検索文字列が現れた 文字、または、バイトの位置を示す正数を戻す (1 オリジン)
開始位置 position、検知回数 occurrence のデフォルトはともに 1
開始位置 position にマイナス値を指定すると 文末から文頭 に向けて検索する。マイナスを指定しても戻り値の出現位置は先頭からの正数となる。

INSTR、INSTRB 以外にも各国語キャラクタセットに使用する特定のコードポイント向けの関数がある。

  • INSTRC : 完全な Unicode 用
  • INSTR2 : UCS2 用
  • INSTR4 : UCS4 用

注意点

INSTR、INSTRB の 検索対象文字列の検索開始位置 position は 開始位置を 0 に指定してもエラーにならないが SUBSTR の 開始位置 position とは異なり 1 にも置換されない。実行結果としては常に「0:未検出」が戻される。

INSTR 使用例

文字列 'ABCdefGHIABC' から 検索文字列 'def' を探す

INSTR('ABCdefGHIABC', 'def') ⇒ 4
          ↑ 4文字目

検索開始位置 position がマイナスの例

INSTR('ABCdefGHIABC', 'ABC', -1) ⇒ 10
                ↑ 10文字目

検索開始位置 position がマイナスで 検知回数 occurrence が 2 以上の例

INSTR('ABCdefGHIABC', 'ABC', -1, 2) ⇒ 1
      ↑        ↑
      |      1回目の検出
    2回目の検出
SQL> select str, subs, s, oc, INSTR(str, subs, sp, oc) instr_pos
  2   from instr_sample;
 
STR                                      SUBS         SP   OC INSTR_POS
---------------------------------------- ---------- ---- ---- ---------
あかまきがみ。あおまきがみ。きまきがみ。 まきがみ      1    1         3
あかまきがみ。あおまきがみ。きまきがみ。 まきがみ      1    2        10
あかまきがみ。あおまきがみ。きまきがみ。 まきがみ     -1    1        16
あかまきがみ。あおまきがみ。きまきがみ。 まきがみ     -7    2         3
あかまきがみ。あおまきがみ。きまきがみ。 まきがみ      0    1         0
                                                      ^^             ^^
                            -- 注意:ゼロを指定すると ↑       未検出↑になる
 


関連 SQL 関数

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)