替换字符串中的所有字符

时间:2015-09-29 12:20:08

标签: sql oracle oracle11g

我想将字符串中的所有字符替换为" *"明星人物。

例如:

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

如何在Oracle PL / SQL中执行此操作?

5 个答案:

答案 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;