PL / SQL从电话号码中删除不需要的字符

时间:2014-09-18 00:30:07

标签: sql regex plsql

我环顾四周,似乎无法找到这个问题的直接答案。我很困惑如何做到这一点。我应该使用正则表达式还是有更好的方法来执行此操作。

我有一个程序可以根据电话号码的开头和电话号码来确定电话号码的格式。我想在格式化之前先清理电话号码。所以我的导师已经输入了一个看起来像这样的电话号码

  

07A3345&安培; 6543

我想删除A和&在格式化之前从电话号码。

谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用translate()执行此操作。一种方法是明确要删除的内容:

select translate(phone, '0123456789', '0123456789A&')

另一种方法是更聪明,只保留数字:

select translate(phone, '0123456789' || translate(phone, 'a0123456789', 'a'), '0123456789')

这将删除所有非数字字符。

答案 1 :(得分:0)

如果您只需删除非数字字符,可以尝试:

TRANSLATE(phone,'0123456789'||phone,'0123456789')

这会将字符09映射到自己,并将电话号码中的任何其他字符映射到 nothing - 实际上将其丢弃。

鉴于你的例子:

DECLARE
  phone VARCHAR(20) := '07A3345&6543';
BEGIN
  DBMS_OUTPUT.PUT_LINE(TRANSLATE(phone,'0123456789'||phone,'0123456789'));
END

将显示:

0733456543