Oracle удалить имя / фамилию / телефон и адрес - PullRequest
0 голосов
/ 09 января 2020

У меня есть таблица Oracle, которая содержит комментарии пользователей. Я хотел бы замаскировать все слова, такие как имя / фамилия / телефон и адрес

Есть ли простой способ сделать это в Oracle?

Пример:

"Hello, i'm Alex DURAND, my phone number is 0685987525"
should be transform in
"Hello, i'm XXXX XXXXXX, my phone number is XXXXXXXXXX"

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 09 января 2020
  1. Телефонный номер маскируется с помощью функции regexp_replace() через '([[:digit:]])' шаблон

  2. Часть, начинающаяся с i'm, извлекается с помощью regexp_substr() функция через '(i''m )(.*?)[^,]+' шаблон

  3. Имя и фамилия извлекаются из строки, полученной на втором шаге, с помощью функции regexp_substr() через '[^ ]+'

  4. На последнем шаге последовательное использование непропускных символов, совпадающих через regexp_replace() и replace(), функционирующих вместе

    with t2 as
    (
     select regexp_replace( str, '([[:digit:]])', 'X') as str,
            regexp_substr(str,'(I''m )(.*?)[^,]+',1,1,'i') as str2       
       from t --> your original table
    ), t3 as
    (
     select regexp_substr(str2,'[^ ]+',1,2) as name,
            regexp_substr(str2,'[^ ]+',1,3) as surname,
            t2.*
       from t2
     )
    select replace(
                   replace( str, name, regexp_replace(name,'(*\S)','X') )
                  ,surname, regexp_replace(surname,'(*\S)','X') )
           as "Result String"        
      from t3
    

, где формат каждого значения в столбец str предполагается фиксированным по всей таблице.

Демо

0 голосов
/ 09 января 2020

Когда задача состоит в том, чтобы удалить только слова, здесь может помочь regexp_replace

select regexp_replace(lower(user_comment), '(surname|name|telephone|address)', '') replace_regexp
  from tab1
...