Я хочу заменить все символы в строке на символ «*» звезды.заменить все символы в строке
Например:
NAME_SURNAME : ANDREY KIMBELL
REPLACED : ****** *******
Как я могу это сделать в Oracle PL/SQL?
Я хочу заменить все символы в строке на символ «*» звезды.заменить все символы в строке
Например:
NAME_SURNAME : ANDREY KIMBELL
REPLACED : ****** *******
Как я могу это сделать в Oracle PL/SQL?
Вы могли бы использовать:
SELECT REGEXP_REPLACE('ANDREY KIMBELL', '\w', '*')
FROM dual
где \w
- это буквенно-цифровые символы плюс _
эквивалент [A-Za-z0-9_]
.
Или, если только буквы:
SELECT REGEXP_REPLACE('ANDREY KIMBELL1', '[[:alpha:]]', '*')
FROM dual
woow. Я пробовал с параметром \ w. Нумерация и буквенно-цифровая печать заменяются. Спасибо, очень много. – Jack
Вы можете использовать функцию TRANSLATE:
SELECT TRANSLATE(UPPER('Andrey Kimbell'),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'**************************')
FROM DUAL
удачи.
Альтернатива использования регулярных выражений функций является использование функции Переводит:
SELECT TRANSLATE('ANDREY KIMBELL1',
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'****************************************************')
FROM dual;
(я намеренно не использовать ВЕРХНЮЮ функциональность, прежде чем делать то ПЕРЕВЕСТИ так, что вводит вторую функцию в смесь, и будет медленные вещи вниз)
ETA: как кто-то попытался указать, отредактировав мой ответ, вместо того, чтобы комментировать его, оказывается, что перевод выполняется медленнее, чем при использовании regexp_replace - похоже, разница, которую я видел, была обусловлена контекстом переключение в pl/sql. Или что-то.
Во всяком случае, ниже, демонстрирует то, что я теперь вижу:
set timing on
create table timing_regexp_replace
as
SELECT REGEXP_REPLACE(owner||' '||table_name||' '||column_name, '[[:alpha:]]', '*') col1
from dba_tab_columns;
create table timing_translate
as
SELECT TRANSLATE(owner||' '||table_name||' '||column_name,
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'****************************************************') col1
from dba_tab_columns;
, которая возвращает:
Table created.
Elapsed: 00:00:00.96
Table created.
Elapsed: 00:00:02.87
SELECT REGEXP_REPLACE('ANDREY KIMBELLasd123[]{}', '.', '*')
FROM dual;
Пожалуйста, ознакомьтесь с этим первым [как ответить] (https://stackoverflow.com/help/how-to-answer) На этот вопрос ответили, очевидно, вы можете добавить свой ответ здесь. Но вам нужно понять некоторые моменты перед ответом. Во-первых, не добавляйте ответ, который ранее был добавлен с тем же кодом или предложением. Во-вторых, не добавляйте слишком сложный ответ, если пользователь задал очень конкретно проблему и что ему нужно решить.В-третьих, вы можете добавить комментарий, если хотите предложить что-либо относительно ответа или вопроса. –
Почему вы хотите хранимую процедуру? (PL/SQL = хранимая процедура) –
Я хочу использовать в программном блоке. – Jack
Используйте 'TRANSLATE'. Он всегда будет быстрее, чем регулярные выражения. –