トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-126 末尾の文字を取り出してパディング

SQLパズル

テーブル
         num
------------
          10
    12345678
123456789102

右から8バイト取り出し、
8バイト未満の場合は、左に0埋めする

出力結果
         num    編集後
------------  --------
          10  00000010
    12345678  12345678
123456789102  56789102


SQL

select num,
nvl(substr(to_char(num),-8),Lpad(to_char(num),8,'0')) as 方法1,
case when Lengthb(to_char(num)) >=8
     then substr(to_char(num),-8)
     else Lpad(to_char(num),8,'0') end as 方法2,
Lpad(RegExp_Substr(to_char(num),'.{1,8}$'),8,'0') as 方法3,
substr('00000000' || to_char(num),-8) as 方法4
from (select 10 as num from dual
union select 12345678 from dual
union select 123456789012 from dual);


解説

方法3か方法4が、分かりやすいと思います