2013/11/16

【Oracle】LEFT関数、RIGHT関数の代わりにSUBSTR関数を使う

 PL/SQLを使っているときVBAの感覚で「RIGHT(lv_value, 2)」とかいたらコンパイラさんに怒られてしまった。
どうやらOracleにはVB系にあるLEFT関数やRIGHT関数は用意されていないようだ。

 LEFT関数は特に問題ないが、可変長データを扱って後ろ(右)から数文字取得したいというときにRIGHT関数が使えないのはかなり不便だ。
調べてみるとどうやらSUBSTR関数でもRIGHT関数のような書き方ができるらしい。



SUBSTR関数



SUBSTRは、文字列の一部を取り出す関数

SUBSTR(string, position [, length])

  • string : 対象文字列
  • position :取出したい文字の開始位置(負の場合は逆向きに数えた数)
  • length : 開始位置から何文字目まで取得するか(文字列長)

 SUBSTRの場合は、キャラクタ単位(全角半角関係なく、何文字取得するか決められる)で取得することができる。 
バイト単位で取出したい場合はSUBSTRB関数を使用する。


SUBSTRB関数の注意点


 SUBSTR(キャラクタ単位)の場合は、特に問題ないが、 
SUBSTRB(バイト単位)の場合には注意が必要。

マルチバイト文字(漢字など)を扱う場合、以下のようになる。


SUBSTRB('全角キャラクタ', 2) → '_角キャラクタ'

※'_'は半角スペース


マルチバイト文字の途中から指定した場合は、スペースで代用されて取得される。



LEFT関数、RIGHT関数を使う


LEFT関数


 LEFT(文字列, 3)をSUBSTRに置き換えるとSUBSTR(文字列, 1, 3)となる。

例)
SUBSTR('1234567890', 1, 3)  → '123'


RIGHT関数


 RIGHT(文字列, 3)をSUBSTRに置き換えるとSUBSTR(文字列, -3)となる。

例)
SUBSTR('1234567890', -3) → '890'




以上

0 件のコメント :

コメントを投稿