如何从字符串中删除所有连字符和空格?

时间:2019-10-30 09:08:56

标签: sql oracle

我有以下代码:

INSERT INTO DWCUST (DWCUSTID, DWSOURCEIDBRIS, DWSOURCEIDMELB, FIRSTNAME, SURNAME, GENDER, PHONE, POSTCODE, CITY, STATE, CUSTCATNAME)
SELECT dwcustSeq.nextval, cb.custid, Null, cb.fname, cb.sname, UPPER(cb.gender), cb.phone, cb.postcode, cb.city, cb.state, cc.custcatname
FROM a2custbris cb
NATURAL JOIN a2custcategory cc
WHERE cb.rowid IN (SELECT source_rowid FROM A2ERROREVENT where filterid = 5);

我想对其进行调整,以便在将cb.phone (varchar2)值添加到dwcust之前,从字符串中删除所有连字符和空格,以便它们只是数字。

例如,我希望04-1234 5254成为0412345254

2 个答案:

答案 0 :(得分:3)

Translate可能有用:

translate(cb.phone, 'X- ', 'X')

例如

select translate(' 04-1234 5254', 'X- ', 'X')
from dual

给予:

TRANSLATE('04-12345254','X-','X')
---------------------------------
0412345254                       
1 row selected.

关于此用法,Oracle文档说:

  

您不能对to_string使用空字符串来删除所有字符   在from_string中,从返回值开始。 Oracle数据库解释   空字符串为null,如果此函数具有null参数,则   它返回null。要删除from_string中的所有字符,请串联   from_string开头的另一个字符,并指定此字符   字符作为to_string。例如,TRANSLATE(expr,   'x0123456789','x')从expr中删除所有数字。

答案 1 :(得分:1)

我会使用regexp_replace()

select regexp_replace('04-1234 5254', '[- ]', '')
from dual;

如果它仍然返回不是数字的东西,例如包含一个/

要确保或删除所有不是数字的内容,请使用以下命令:

select regexp_replace('04-1234 5254', '[^0-9]', '')
from dual;

只需将SELECT列表中的cb.phone替换为regexp_replace(cb.phone, , '[^0-9]', '')

SELECT ...., regexp_replace(cb.phone, , '[^0-9]', ''), ....
FROM a2custbris cb
....