我想将字符串中的所有字符替换为" *"明星人物。
例如:
NAME_SURNAME : ANDREY KIMBELL
REPLACED : ****** *******
如何在Oracle PL / SQL中执行此操作?
答案 0 :(得分:6)
您可以使用:
<强> Demo 强>
SELECT REGEXP_REPLACE('ANDREY KIMBELL', '\w', '*')
FROM dual
其中\w
是字母数字字符加_
相当于[A-Za-z0-9_]
。
或者只是字母:
SELECT REGEXP_REPLACE('ANDREY KIMBELL1', '[[:alpha:]]', '*')
FROM dual
答案 1 :(得分:3)
你可以像这样
select regexp_replace('abdcde123fge','[A-Za-z]','*')
from dual;
用a
替换a-z和A-Z范围内的所有内容答案 2 :(得分:0)
您可以使用TRANSLATE功能:
SELECT TRANSLATE(UPPER('Andrey Kimbell'),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'**************************')
FROM DUAL
祝你好运。
答案 3 :(得分:0)
使用regexp函数的另一种方法是使用TRANSLATE函数:
SELECT TRANSLATE('ANDREY KIMBELL1',
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'****************************************************')
FROM dual;
(我故意在执行TRANSLATE之前没有使用UPPER功能,因为这会在混合中引入第二个功能,并且会减慢速度)
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
答案 4 :(得分:-1)
SELECT REGEXP_REPLACE('ANDREY KIMBELLasd123[]{}', '.', '*')
FROM dual;