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

10-248 読みやすい多段Replace

SQLパズル

テーブル
ssn
----------
-12-1234
111- -2222
111-11-
- -
- -9876

000-00-0000
のフォーマットで0を補完したssnを求める。

出力結果
ssn         ssn2
----------  -----------
-12-1234    000-12-1234
111- -2222  111-00-2222
111-11-     111-11-0000
- -         000-00-0000
- -9876     000-00-9876

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


SQL

col ssn2 for a20

with t as(
select '-12-1234' as ssn from dual union all
select '111- -2222'      from dual union all
select '111-11-'         from dual union all
select '- -'             from dual union all
select '- -9876'         from dual)
select ssn,
RegExp_Replace(
Replace(
RegExp_Replace(ssn,'^-' ,'000-' )
                  ,'- -','-00-' )
                  ,'-$' ,'-0000') as ssn2
from t;


解説

search  patternと
replace patternをひとまとめにする書き方で、
分かりやすい多段Replaceだと思います。