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

7-34 イニシャルと名前を取得

SQLパズル

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


SQL

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引数に負数を指定して、
文字列の末尾から半角空白を検索してます。