sql - 使用单行查询更新
问题描述
我有大约数千条记录,我需要更新一个包含电话号码的列。我的桌子上有这样的电话号码(客户)-
12345678,888-888-8888,(888)-333-5555,555-555
但是,我需要使用单个查询更新列,以便更新所有数千条记录并确保数据看起来像这样
(888)-333-5555
请让我知道解决方案。
解决方案
如果目标表中的每个电话号码确实有 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.
推荐阅读
- xpath - protractor using xpath //*[contains('text')] 错误元素不可见
- azure-active-directory - Azure AD 自动添加了 offline_access
- r - 缺少参数“mainPanel”,没有默认值
- git - 我如何恢复提交和取消提交(?)文件?
- firebase - 您如何获得服务器上所有令牌的值?
- mongodb - 来自 MongoDB 查询的排序结果
- testing - 使用 Yii2 的 Codeception 的 see() 方法不显示页面的全部内容
- j - J 打印状态栏和百分比
- java - 如何在运行时 Spring Boot 中更新 application.properties
- python-2.7 - 无法导入 yaml - python=2.7 的 anaconda 虚拟环境