NameTable FullName ---------------- Blaise Pascal Bruce Scott Edgar Frank Codd George Boole Wendy Wendy フルネームから、イニシャルと名前を取得する。 出力結果 フルネーム イニシャル 名前 ---------------- ---------- ------ Blaise Pascal B Pascal Bruce Scott B Scott Edgar Frank Codd E F Codd George Boole G Boole Wendy Wendy W Wendy
create table NameTable as select 'Blaise Pascal' as FullName from dual union select 'Bruce Scott' from dual union select 'Edgar Frank Codd' from dual union select 'George Boole' from dual union select 'Wendy Wendy' from dual
col フルネーム for a20 col イニシャル for a14 col 名前 for a10 --■■■正規表現を使わない方法■■■ select FullName as フルネーム, translate(substr(FullName,1,instr(FullName,' ',-1)), '0abcdefghijklmnopqrstuvwxyz','0') as イニシャル, substr(FullName,instr(FullName,' ',-1) +1,Length(FullName)) as 名前 from NameTable; --■■■正規表現を使う方法1(10g以降)■■■ select FullName as フルネーム, RegExp_Replace(substr(FullName,1,instr(FullName,' ',-1)),'[a-z]') as イニシャル, RegExp_Replace(FullName,'^.+ (.+)$','\1') as 名前 from NameTable;
instr関数の第3引数に負数を指定して、 文字列の末尾から半角空白を検索してます。