Home実験室 − No.0042


        No.0042(SQL)
        文字列から一部を取り出す(SUBSTR)

■環境
  □OS: Windows XP Professional SP3
  □Oracle: Oracle Database 11g R2 (Standard)
  □OSログインユーザ: ORA_DBAグループ
  □Oracleユーザ: dicdic(実験用ユーザー)

■実験
  0. 実験ユーザー「dicdic」でコネクトする。

SQL> conn dicdic/Oracle11g 接続されました。 SQL>



  1. SUBSTR関数を使うと、文字列の中から一部を抜き出してくれる。Excelで使うMID関数みたいな感じ。
     下の例の場合、7文字目(1オリジン)をスタートとしてそこから6文字を拾ってくれる。

SQL> SELECT SUBSTR('Oracleデータベース 11gリリース2',7,6) FROM DUAL; SUBSTR('ORAC ------------ データベース SQL>



  2. 拾う文字数を指定しない場合は末尾まですべて拾ってくれる。

SQL> SELECT SUBSTR('Oracleデータベース 11gリリース2',7) FROM DUAL; SUBSTR('ORACLEデータベー ------------------------- データベース 11gリリース2 SQL>



  3. 開始位置の数字をマイナス(負の数)で指定すると、末尾から拾いにいってくれる。
     これだと、Excel関数のRight関数と同じ動きだ。

SQL> SELECT SUBSTR('Oracleデータベース 11gリリース2',-8) FROM DUAL; SUBSTR('ORAC ------------ 11gリリース2 SQL>



  4. こんな使い方もできる。

SQL> SELECT SUBSTR('Oracleデータベース 11gリリース2',-8,3) FROM DUAL; SUB --- 11g SQL>



  5. さて、この関数にもバイト数基準で考える亜種、SUBSTRB関数がある。

SQL> SELECT SUBSTRB('Oracleデータベース 11gリリース2',7,6) FROM DUAL; SUBSTR ------ データ SQL>



  6. SUBSTRB関数を使うと、全角(マルチバイト)文字は文字コードの途中で切られてしまう。
     文字化けしたりしそうなものだが、SUBSTRB関数では文字化けする替わりに半スペを戻すようだ。
     下の例は、拾った文字列の末尾が切れてしまった場合。

SQL> SELECT SUBSTRB('Oracleデータベース 11gリリース2',7,5) FROM DUAL; SUBST ----- デー SQL>



  7. 同様に下の例は、拾った文字列の先頭が切れてしまった場合。

SQL> SELECT SUBSTRB('Oracleデータベース 11gリリース2',-8) FROM DUAL; SUBSTRB( -------- リース2 SQL>





    【PR】    Oracle実験室監修  『Oracleアーキテクチャ鳥瞰図』 PDF  (Oracleのアーキテクチャを一目で俯瞰できるイラスト)  


Home実験室 − No.0042

© 2011-2011   Amateur Laboratory of ORACLE
inserted by FC2 system