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

10-161 半角空白でsplit

SQLパズル

テーブル
Val
------------------------
Augustus de Morgan
George Boole
Lawrence Joseph Ellison
Oracle Taro
Wendy Wendy

Valの値を、半角空白でsplitして、
以下の形式で出力する

出力結果
Val                      1番目     2番目   3番目
-----------------------  --------  ------  -------
Augustus de Morgan       Augustus  de      Morgan
George Boole             George    Boole   null
Lawrence Joseph Ellison  Lawrence  Joseph  Ellison
Oracle Taro              Oracle    Taro    null
Wendy Wendy              Wendy     Wendy   null

こちらを参考にさせていただきました(英語)


SQL

col "1番目" for a20
col "2番目" for a20
col "3番目" for a20

select Val,
Ltrim(RegExp_Substr(Val,'(^| )[^ ]+',1,1)) as "1番目",
Ltrim(RegExp_Substr(Val,'(^| )[^ ]+',1,2)) as "2番目",
Ltrim(RegExp_Substr(Val,'(^| )[^ ]+',1,3)) as "3番目"
from (select 'Augustus de Morgan' as Val from dual
union select 'George Boole' from dual
union select 'Lawrence Joseph Ellison' from dual
union select 'Oracle Taro' from dual
union select 'Wendy Wendy' from dual);


解説

肯定戻り読みが使えれば、
これでいいのですが
(^|(?<= ))[^ ]+

Oracle10gの正規表現では、
肯定戻り読みが使用できないのです