我希望将字符串中的所有字符替换为 "*" 星号字符。
例如:
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
像这样
select regexp_replace('abdcde123fge','[A-Za-z]','*')
from dual;
这将用 * 替换 a-z 和 A-Z 范围内的所有内容。
SELECT TRANSLATE(UPPER('Andrey Kimbell'),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'**************************')
FROM DUAL
祝你好运。
SELECT TRANSLATE('ANDREY KIMBELL1',
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'****************************************************')
FROM dual;
在执行TRANSLATE之前,我故意没有使用UPPER功能,因为这会引入第二个函数并使速度变慢。
ETA:有人试图通过编辑我的答案来指出,而不是评论它,结果表明TRANSLATE比使用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;
TRANSLATE
。它总是比正则表达式更快。 - Lalit Kumar B