2015-09-29 3 views
1

Я хочу заменить все символы в строке на символ «*» звезды.заменить все символы в строке

Например:

NAME_SURNAME : ANDREY KIMBELL 
REPLACED  : ****** ******* 

Как я могу это сделать в Oracle PL/SQL?

+0

Почему вы хотите хранимую процедуру? (PL/SQL = хранимая процедура) –

+0

Я хочу использовать в программном блоке. – Jack

+0

Используйте 'TRANSLATE'. Он всегда будет быстрее, чем регулярные выражения. –

ответ

3

Вы могли бы использовать:

Demo

SELECT REGEXP_REPLACE('ANDREY KIMBELL', '\w', '*') 
FROM dual 

где \w - это буквенно-цифровые символы плюс _ эквивалент [A-Za-z0-9_].

Или, если только буквы:

SELECT REGEXP_REPLACE('ANDREY KIMBELL1', '[[:alpha:]]', '*') 
FROM dual 
+1

woow. Я пробовал с параметром \ w. Нумерация и буквенно-цифровая печать заменяются. Спасибо, очень много. – Jack

3

вы могли бы к нему, как этот

select regexp_replace('abdcde123fge','[A-Za-z]','*') 
from dual; 

Это заменяет все в пределах Аз и AZ с *

+0

это сработало! Благодарю. – Jack

+0

Ответ пользователя lad2025 более умный и простой. – Jack

0

Вы можете использовать функцию TRANSLATE:

SELECT TRANSLATE(UPPER('Andrey Kimbell'), 
       'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
       '**************************') 
    FROM DUAL 

удачи.

0

Альтернатива использования регулярных выражений функций является использование функции Переводит:

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 
-1
SELECT REGEXP_REPLACE('ANDREY KIMBELLasd123[]{}', '.', '*') 
FROM dual; 
+2

Пожалуйста, ознакомьтесь с этим первым [как ответить] (https://stackoverflow.com/help/how-to-answer) На этот вопрос ответили, очевидно, вы можете добавить свой ответ здесь. Но вам нужно понять некоторые моменты перед ответом. Во-первых, не добавляйте ответ, который ранее был добавлен с тем же кодом или предложением. Во-вторых, не добавляйте слишком сложный ответ, если пользователь задал очень конкретно проблему и что ему нужно решить.В-третьих, вы можете добавить комментарий, если хотите предложить что-либо относительно ответа или вопроса. –

Смежные вопросы