col マスク前 for a15
col マスク後 for a15
--■■■model句と正規表現を使う方法(10g以降)■■■
select 会員番号,マスク前,マスク後
from 会員
model
partition by (RowNum as PID)
dimension by (0 as soeji)
measures(会員番号,電話番号 as マスク前,電話番号 as マスク後)
rules ITERATE (100)
(
マスク後[0] =
case when RegExp_Instr(マスク後[0],'[0-9]',1,ITERATION_NUMBER+1) > 0
then RegExp_Replace(マスク後[0],'[0-9]',
substr(会員番号[0],case when mod(ITERATION_NUMBER+1,length(会員番号[0])) = 0
then length(会員番号[0])
else mod(ITERATION_NUMBER+1,length(会員番号[0])) end,1),
RegExp_Instr(マスク後[0],'[0-9]',1,ITERATION_NUMBER+1),1)
else マスク後[0] end)
order by マスク前;
--■■■case式を多用する方法■■■
select 会員番号,電話番号 as マスク前,
case when substr(電話番号,1,1) = '-' then '-'
else substr(会員番号,1,1) end ||
case when substr(電話番号,2,1) = '-' then '-'
else substr(会員番号,Length(replace(substr(電話番号,1,2),'-')),1) end ||
case when substr(電話番号,3,1) = '-' then '-'
else substr(会員番号,Length(replace(substr(電話番号,1,3),'-')),1) end ||
case when substr(電話番号,4,1) = '-' then '-'
else substr(会員番号,Length(replace(substr(電話番号,1,4),'-')),1) end ||
case when substr(電話番号,5,1) = '-' then '-'
else substr(会員番号,Length(replace(substr(電話番号,1,5),'-')),1) end ||
case when substr(電話番号,6,1) = '-' then '-'
else substr(会員番号,Length(replace(substr(電話番号,1,6),'-')),1) end ||
case when substr(電話番号,7,1) = '-' then '-'
else substr(会員番号,Length(replace(substr(電話番号,1,7),'-')),1) end ||
case when substr(電話番号,8,1) = '-' then '-'
else substr(会員番号,Length(replace(substr(電話番号,1,8),'-')),1) end ||
case when substr(電話番号,9,1) = '-' then '-'
else substr(会員番号 || 会員番号,Length(replace(substr(電話番号,1,9),'-')),1) end ||
case when substr(電話番号,10,1) = '-' then '-'
else substr(会員番号 || 会員番号,Length(replace(substr(電話番号,1,10),'-')),1) end ||
case when substr(電話番号,11,1) = '-' then '-'
else substr(会員番号 || 会員番号,Length(replace(substr(電話番号,1,11),'-')),1) end ||
case when substr(電話番号,12,1) = '-' then '-'
else substr(会員番号 || 会員番号,Length(replace(電話番号,'-')),1) end as マスク後
from 会員;