Заменить неизвестное количество символов в строке на «*» в Oracle - PullRequest
0 голосов
/ 14 декабря 2018

Для данного столбца MEMO_TXT содержит следующий текст в одной MEMO таблице:
'Password changed from: 12345 to: abcdefg.'

Как заменить 12345 и abcdefg в приведенном выше тексте с одинаковыми по размеру '*' символами?

как,
'Password changed from: 12345 to: abcdefg.'
'Password changed from: ***** to: *******.'

из и в части в приведенной выше строке могут различаться, и я не уверен, как написать запрос ОБНОВЛЕНИЕ с REPLACE, так как у меня нет фиксированного шаблона для поиска.

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018
select rpad('*', 10, '*')

Думаю, эта ссылка может вам помочь:

https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions159.htm#SQLRF06103

0 голосов
/ 14 декабря 2018

Если текст сообщения всегда в этом формате, старый добрый SUBSTR + INSTR + REPLACE может выполнить эту работу.

SQL> WITH test (col)
  2       AS (SELECT '&message' FROM DUAL),
  3       pos
  4       AS (SELECT col,
  5                  INSTR (col, ':', 1, 1)
  6                     colon_1,
  7                  INSTR (col, ':', 1, 2)
  8                     colon_2,
  9                  LENGTH (col) len
 10             FROM test),
 11       inter
 12       AS (SELECT col,
 13                  trim(SUBSTR (col, colon_1 + 2, colon_2 - 4 - colon_1)) old_pw,
 14                  TRIM (RTRIM (SUBSTR (col, colon_2 + 1, len - colon_2), '.'))
 15                     new_pw
 16             FROM pos)
 17  SELECT REPLACE (REPLACE (col, old_pw, LPAD ('*', LENGTH (old_pw), '*')),
 18                  new_pw,
 19                  LPAD ('*', LENGTH (new_pw), '*')) result
 20    FROM inter;
Enter value for message: Password changed from: 12345  to:  abcdefg.

RESULT
-------------------------------------------
Password changed from: *****  to:  *******.

SQL> /
Enter value for message: Password changed from: abxyz44#  to:  87ZU_3.

RESULT
----------------------------------------------
Password changed from: ********  to:  *******

SQL>
0 голосов
/ 14 декабря 2018

попробуйте использовать функцию REGEXP_REPLACE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...