部分文字列の出現位置を検索する
INSTR ( string , substring [, position [, occurrence]] )
INSTRB ( string , substring [, position [, occurrence]] )
return [ number ]
string | 対象の文字列 | |
substring | 検索する文字列 | |
position 正の場合 | 検索対象文字列の検索開始位置(1〜) | default 1 |
position 負の場合 | 文字の末尾から逆向きに数えた位置 | |
position 0 の場合 | (要注意)常に未検出(0)を戻す | |
occurrence | 取り出すまでの検知回数 | default 1=最初 |
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 関数
- 部分文字列を切り出す ⇒ substr ( s1, p, l )
- 文字列の長さを求める ⇒ length ( s )
- 文字列を文字単位に置換する ⇒ translate ( e, f, t )
- 文字列を単語レベルで置換する ⇒ replace ( s1, s2, r )
- 英文字の全てを小文字に変換する ⇒ lower ( s )
- 正規表現でマッチする文字の位置を調べる ⇒ regexp_instr ( s, p )
- 半角カナを全角かなに変換する ⇒ to_full_kana ( s, t )
- 全角空白と半角スペースを取り除く ⇒ trim_multi ( s, r )
- 文字列中からトークンを切り出す ⇒ strtoken( s, d, p )