我有大约数千条记录,我需要更新一列包含电话号码的列。我的表(客户)中有这样的电话号码-
12345678,888-888-8888,(888)-333-5555,555-555
但是我需要通过一个查询来更新该列,以便所有千条记录都得到更新,并确保数据看起来像这样
(888)-333-5555
请让我知道解决方法。
答案 0 :(得分:0)
如果目标表中的每个电话号码确实具有10位数字(依次带有可变的括号和连字符等),则可以通过两阶段的正则表达式替换来重新格式化它。
下面是一个示例,它使用一个名为LOREM
的表,其电话号码字段为IPSUM
。
创建测试表:
CREATE TABLE LOREM(IPSUM VARCHAR2(32));
INSERT INTO LOREM VALUES ('1234567890');
INSERT INTO LOREM VALUES ('888-888-8888');
INSERT INTO LOREM VALUES ('(888)-333-5555');
COMMIT;
初始状态:
SELECT IPSUM
FROM LOREM
ORDER BY 1 ASC;
IPSUM
_________________
(888)-333-5555
1234567890
888-888-8888
然后进行更新。这有两个正则表达式替换。首先,它抛出不是数字的任何东西。然后将10位数字重新格式化为(###)-###-####:
UPDATE LOREM SET IPSUM = REGEXP_REPLACE(
REGEXP_REPLACE(IPSUM, '[^0-9]{1,}', NULL, 1, 0),
'([0-9]{3})([0-9]{3})([0-9]{4})', '(\1)-\2-\3',1,0 );
3 rows updated.
然后检查结果:
SELECT IPSUM
FROM LOREM
ORDER BY 1 ASC;
IPSUM
_________________
(123)-456-7890
(888)-333-5555
(888)-888-8888
3 rows selected.