トップページに戻る    次のmodel句のサンプルへ    前のmodel句のサンプルへ

model句09 連続した置換で、最初の文字のみを残す

SQLパズル

SeqRegexテーブル
str
-------
BABCBA
ABBBCBA
CBABC
BCABAC

各行のstrを1文字目から見て行って、
最初に登場した文字のみを残した文字列を求める。

出力結果
str      newStr
-------  ------
BABCBA   BAC
ABBBCBA  ABC
CBABC    CBA
BCABAC   BCA


データ作成スクリプト

create table SeqRegex(str) as
select 'BABCBA'  from dual union all
select 'ABBBCBA' from dual union all
select 'CBABC'   from dual union all
select 'BCABAC'  from dual;


SQL

select str,newStr
  from SeqRegex
 model
 dimension by (RowNum as soeji)
 measures(str,str as newStr)
 rules ITERATE (100) (newStr[any] = RegExp_Replace(newStr[CV()],'(.)(.*)\1','\1\2'));


解説

.NETなら可変長戻り読みを使った置換でいいのですが、
Oracle11gの正規表現ですら、可変長戻り読みは使えないので、
連続した置換をmodel句を使って実行してます。

2008-08-15 SQLパズル:文字列中の重複する文字を削除する

6-2 出現回数が2回目以降なら削除その1
Does anyone have some wizzy code or bright ideas?