【发布时间】:2014-09-18 00:30:06
【问题描述】:
我环顾四周,似乎找不到这个问题的直接答案。我对如何做到这一点感到困惑。我应该使用正则表达式还是有更好的方法来做到这一点。
我有一个程序可以根据电话号码的开头和长度来格式化电话号码。我希望能够在格式化之前先清理电话号码。所以我的导师输入了一个看起来像这样的电话号码
07A3345&6543
我想在格式化之前从电话号码中删除 A 和 &。
谢谢
【问题讨论】:
我环顾四周,似乎找不到这个问题的直接答案。我对如何做到这一点感到困惑。我应该使用正则表达式还是有更好的方法来做到这一点。
我有一个程序可以根据电话号码的开头和长度来格式化电话号码。我希望能够在格式化之前先清理电话号码。所以我的导师输入了一个看起来像这样的电话号码
07A3345&6543
我想在格式化之前从电话号码中删除 A 和 &。
谢谢
【问题讨论】:
您可以使用translate() 执行此操作。一种方法是明确说明您要删除的内容:
select translate(phone, '0123456789', '0123456789A&')
另一种方法是更聪明,只保留数字:
select translate(phone, '0123456789' || translate(phone, 'a0123456789', 'a'), '0123456789')
这将删除所有非数字字符。
【讨论】:
如果你只需要删除非数字字符,你可以试试这个:
TRANSLATE(phone,'0123456789'||phone,'0123456789')
这会将字符0 到9 映射到它们自己,并将电话号码中的任何其他字符映射到nothing——实际上是丢弃它们。
举个例子:
DECLARE
phone VARCHAR(20) := '07A3345&6543';
BEGIN
DBMS_OUTPUT.PUT_LINE(TRANSLATE(phone,'0123456789'||phone,'0123456789'));
END
将显示:
0733456543
【讨论】: