我正在尝试使用过程在某些行中添加一些特殊字符。我需要在电话号码之间添加括号。数据库包括列电话#。
如果电话号码是:9999999999
现在我想在此电话号码中添加括号:
(999)(999)(9999)
如果电话号码已经包含,我不应对其进行任何更改。
CREATE OR REPLACE PROCEDURE Phoneno
AS
BEGIN
UPDATE PERSON
SET PHONE# = "here i want to add brackets to phone numbers"
END;
/
我应该在设定的手机状态下写什么,以便我可以在电话号码上添加括号。
答案 0 :(得分:3)
您可以使用字符串操作构建它,使用case
查看是否有必要:
(case when phone like '%(%' then phone
when length(phone) <> 10 then phone
else '(' || substr(phone, 1, 3) || ')(' || substr(phone, 4, 3) || ')(' || substr(phone, 7, 4)
end)
答案 1 :(得分:0)
这是您可能考虑的另一种选择;我删除括号(如果存在),然后使用正则表达式格式化输出:
SQL> WITH test (phone)
2 AS (SELECT '9999999999' FROM DUAL
3 UNION
4 SELECT '(123)4567890' FROM DUAL
5 UNION
6 SELECT '9874(234)123' FROM DUAL
7 UNION
8 SELECT '(123)(456)78' FROM DUAL)
9 SELECT phone,
10 REGEXP_REPLACE (REPLACE (REPLACE (phone, '(', ''), ')', ''),
11 '(\d{3})(\d{3})(\d{1,4})',
12 '(\1)(\2)(\3)')
13 result
14 FROM test;
PHONE RESULT
------------ --------------------
(123)(456)78 (123)(456)(78)
(123)4567890 (123)(456)(7890)
9874(234)123 (987)(423)(4123)
9999999999 (999)(999)(9999)
SQL>