Home実験室 − No.0046


        No.0046(SQL)
        文字長さを揃える(LPAD関数とRPAD関数)

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

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

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



  1. LPAD関数は、文字列の左側を、第2引数で指定したバイト数になるまで第3指定した文字列で埋め尽くす。

SQL> SELECT 氏名,LPAD(氏名,16,'$\') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 LPAD(氏名,16,'$\') ---------------------------------------- -------------------------------- 森永 怜子 $\$\$\森永 怜子 小久保 和歌子 $\小久保 和歌子 三井 美恵子 $\$\三井 美恵子 鶴岡 依子 $\$\$\鶴岡 依子 南田 泰子 $\$\$\南田 泰子 仲村 寿子 $\$\$\仲村 寿子 安藤 顕子 $\$\$\安藤 顕子 金城 美貴子 $\$\金城 美貴子 星 啓子 $\$\$\$\星 啓子 西田 佳奈子 $\$\西田 佳奈子 松崎 麻里子 $\$\松崎 麻里子 江島 貴子 $\$\$\江島 貴子 12行が選択されました。 SQL>



  2. 文字数ではなくバイト数基準であることに留意する。

SQL> SELECT 氏名,LPAD(氏名,16,'◆') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 LPAD(氏名,16,'◆') ---------------------------------------- -------------------------------- 森永 怜子 ◆◆◆森永 怜子 小久保 和歌子 ◆小久保 和歌子 三井 美恵子 ◆◆三井 美恵子 鶴岡 依子 ◆◆◆鶴岡 依子 南田 泰子 ◆◆◆南田 泰子 仲村 寿子 ◆◆◆仲村 寿子 安藤 顕子 ◆◆◆安藤 顕子 金城 美貴子 ◆◆金城 美貴子 星 啓子 ◆◆◆◆星 啓子 西田 佳奈子 ◆◆西田 佳奈子 松崎 麻里子 ◆◆松崎 麻里子 江島 貴子 ◆◆◆江島 貴子 12行が選択されました。 SQL>



  3. 全角と半角が混在するとデコボコになってしまうことがあるので注意。

SQL> SELECT 氏名,LPAD(氏名,17,'◆W') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 LPAD(氏名,17,'◆W') ---------------------------------------- ---------------------------------- 森永 怜子 ◆W◆W森永 怜子 小久保 和歌子 ◆W小久保 和歌子 三井 美恵子 ◆W◆三井 美恵子 鶴岡 依子 ◆W◆W鶴岡 依子 南田 泰子 ◆W◆W南田 泰子 仲村 寿子 ◆W◆W仲村 寿子 安藤 顕子 ◆W◆W安藤 顕子 金城 美貴子 ◆W◆金城 美貴子 星 啓子 ◆W◆W◆W星 啓子 西田 佳奈子 ◆W◆西田 佳奈子 松崎 麻里子 ◆W◆松崎 麻里子 江島 貴子 ◆W◆W江島 貴子 12行が選択されました。 SQL>



  4. バイト数を短く指定した場合にはパディングがまったくできないばかりか、お尻が切れてしまう。

SQL> SELECT 氏名,LPAD(氏名,8,'◆') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 LPAD(氏名,8,'◆' ---------------------------------------- ---------------- 森永 怜子 森永 怜 小久保 和歌子 小久保  三井 美恵子 三井 美 鶴岡 依子 鶴岡 依 南田 泰子 南田 泰 仲村 寿子 仲村 寿 安藤 顕子 安藤 顕 金城 美貴子 金城 美 星 啓子 星 啓子 西田 佳奈子 西田 佳 松崎 麻里子 松崎 麻 江島 貴子 江島 貴 12行が選択されました。 SQL>



  5. RPAD関数は文字列の右側を埋める。

SQL> SELECT 氏名,RPAD(氏名,16,'$\') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 RPAD(氏名,16,'$\') ---------------------------------------- -------------------------------- 森永 怜子 森永 怜子$\$\$\ 小久保 和歌子 小久保 和歌子$\ 三井 美恵子 三井 美恵子$\$\ 鶴岡 依子 鶴岡 依子$\$\$\ 南田 泰子 南田 泰子$\$\$\ 仲村 寿子 仲村 寿子$\$\$\ 安藤 顕子 安藤 顕子$\$\$\ 金城 美貴子 金城 美貴子$\$\ 星 啓子 星 啓子$\$\$\$\ 西田 佳奈子 西田 佳奈子$\$\ 松崎 麻里子 松崎 麻里子$\$\ 江島 貴子 江島 貴子$\$\$\ 12行が選択されました。



  6. 埋める場所が右側に変わっただけ。

SQL> SELECT 氏名,RPAD(氏名,16,'◆') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 RPAD(氏名,16,'◆') ---------------------------------------- -------------------------------- 森永 怜子 森永 怜子◆◆◆ 小久保 和歌子 小久保 和歌子◆ 三井 美恵子 三井 美恵子◆◆ 鶴岡 依子 鶴岡 依子◆◆◆ 南田 泰子 南田 泰子◆◆◆ 仲村 寿子 仲村 寿子◆◆◆ 安藤 顕子 安藤 顕子◆◆◆ 金城 美貴子 金城 美貴子◆◆ 星 啓子 星 啓子◆◆◆◆ 西田 佳奈子 西田 佳奈子◆◆ 松崎 麻里子 松崎 麻里子◆◆ 江島 貴子 江島 貴子◆◆◆ 12行が選択されました。 SQL>



  7. 埋める場所が右側に変わっただけ。

SQL> SELECT 氏名,RPAD(氏名,17,'◆W') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 RPAD(氏名,17,'◆W') ---------------------------------------- ---------------------------------- 森永 怜子 森永 怜子◆W◆W 小久保 和歌子 小久保 和歌子◆W 三井 美恵子 三井 美恵子◆W◆ 鶴岡 依子 鶴岡 依子◆W◆W 南田 泰子 南田 泰子◆W◆W 仲村 寿子 仲村 寿子◆W◆W 安藤 顕子 安藤 顕子◆W◆W 金城 美貴子 金城 美貴子◆W◆ 星 啓子 星 啓子◆W◆W◆W 西田 佳奈子 西田 佳奈子◆W◆ 松崎 麻里子 松崎 麻里子◆W◆ 江島 貴子 江島 貴子◆W◆W 12行が選択されました。 SQL>



  8. お尻が切れてしまうのは、LPADとまったく同じ動き。

SQL> SELECT 氏名,RPAD(氏名,8,'◆') FROM TT01_学生 WHERE 在籍区分コード = 02 and 氏名 Like '%子'; 氏名 RPAD(氏名,8,'◆' ---------------------------------------- ---------------- 森永 怜子 森永 怜 小久保 和歌子 小久保  三井 美恵子 三井 美 鶴岡 依子 鶴岡 依 南田 泰子 南田 泰 仲村 寿子 仲村 寿 安藤 顕子 安藤 顕 金城 美貴子 金城 美 星 啓子 星 啓子 西田 佳奈子 西田 佳 松崎 麻里子 松崎 麻 江島 貴子 江島 貴 12行が選択されました。 SQL>





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


Home実験室 − No.0046

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