【Oracle SQL】SUBSTR関数でVBのRight、Left関数の様な使い方
Oracleの関数には、VB.NETで用意されているRight関数やLeft関数が存在しません。
文字列の抽出で、左から何桁とか、右から何桁とかを切り出す処理はよくあるものです。
OracleではSUBSTR関数しかないので、これを使うしかありません。
SUBSTR関数の引数は以下の様になっています。
SUBSTR ( string , position [, length] )
SUBSTRB ( string , position [, length] )
・string:抽出元の文字列
・position:抽出開始位置(1~)
(負の場合は右端から逆順に処理)
・length:抽出文字列長
・関数の戻り値:抽出文字列
SUBSTRは文字列をキャラクタ単位での処理を行い、 SUBSTRBは文字列をバイト単位での処理を行います。
文字列に漢字等のマルチバイト文字が含まれている場合にはSUBSTRBは問題があります。 文字コードがシフトJISの場合で例を示しますと以下の様になります。
SUBSTRは全角文字があっても、1文字は1文字として処理されます。 ただし、SUBSTRBは4つ目の例でも分かるように、漢字の泣き別れが発生し、 3桁目には半角の空白が返ってきます。
漢字の泣き別れの件はどうするのかは、テーブル設計や、出力する時に対応する様に するしかないと思います。
上の例の position のところをマイナスにすると以下の様になります。
文字列の最後からの処理になっているのが分かります。 さて、Right関数 Left関数 的な利用ですが、 Right関数 では position を 「1」として length に文字数を設定します。 Left関数 では position を文字数のマイナス値として length に文字数を設定します。 尚、番号などを先頭「0」付きで編集する場合、以下の様な使い方もあります。 TO_CHAR関数 でフォーマットを使えば2行目の様にできますが、 変換する数値が8桁より大きく、表示が下8桁のみの場合は1行目の方法も有用かと思います。
■関連ページ
⇒OracleSQLの関数の中でよく使用するものその1
⇒OracleSQLの関数の中でよく使用するものその2
⇒OracleSQLの集計関数
Oracleの基本 ~データベース入門から設計/運用の初歩まで
SUBSTR関数の引数は以下の様になっています。
SUBSTR ( string , position [, length] )
SUBSTRB ( string , position [, length] )
・string:抽出元の文字列
・position:抽出開始位置(1~)
(負の場合は右端から逆順に処理)
・length:抽出文字列長
・関数の戻り値:抽出文字列
SUBSTRは文字列をキャラクタ単位での処理を行い、 SUBSTRBは文字列をバイト単位での処理を行います。
文字列に漢字等のマルチバイト文字が含まれている場合にはSUBSTRBは問題があります。 文字コードがシフトJISの場合で例を示しますと以下の様になります。
SUBSTRは全角文字があっても、1文字は1文字として処理されます。 ただし、SUBSTRBは4つ目の例でも分かるように、漢字の泣き別れが発生し、 3桁目には半角の空白が返ってきます。
漢字の泣き別れの件はどうするのかは、テーブル設計や、出力する時に対応する様に するしかないと思います。
上の例の position のところをマイナスにすると以下の様になります。
文字列の最後からの処理になっているのが分かります。 さて、Right関数 Left関数 的な利用ですが、 Right関数 では position を 「1」として length に文字数を設定します。 Left関数 では position を文字数のマイナス値として length に文字数を設定します。 尚、番号などを先頭「0」付きで編集する場合、以下の様な使い方もあります。 TO_CHAR関数 でフォーマットを使えば2行目の様にできますが、 変換する数値が8桁より大きく、表示が下8桁のみの場合は1行目の方法も有用かと思います。
■関連ページ
⇒OracleSQLの関数の中でよく使用するものその1
⇒OracleSQLの関数の中でよく使用するものその2
⇒OracleSQLの集計関数
Oracleの基本 ~データベース入門から設計/運用の初歩まで
コメント