You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中使用SUBSTRING函数为每行插入电话号码区号

问题

现有PostgreSQL表结构及数据如下:

create table phone_log(phone_number CHAR(20) NOT NULL,
                      area_code CHAR(10));

INSERT INTO phone_log(phone_number) 
     VALUES ('310-430-9201');
    
INSERT INTO phone_log(phone_number)
    VALUES ('917-829-2876');
    
INSERT INTO phone_log(phone_number)
    VALUES ('424-917-1055');

当前phone_log表中电话号码数据已存在,但area_code字段为空。需要使用SUBSTRING函数提取每个电话号码的区号,填充到对应行的area_code字段中。

解决方法

可以通过UPDATE语句结合SUBSTRING函数批量完成更新,根据电话号码的格式,有两种实现方式:

1. 固定位置截取

针对当前XXX-XXX-XXXX的固定格式,区号是前3位字符,直接按位置截取:

UPDATE phone_log
SET area_code = SUBSTRING(phone_number FROM 1 FOR 3);

2. 分隔符匹配截取

如果后续区号长度可能变化,但仍以-作为分隔符,用正则匹配第一个-之前的内容更灵活:

UPDATE phone_log
SET area_code = SUBSTRING(phone_number FROM '^[^-]+');

这里的正则表达式^[^-]+表示匹配字符串开头到第一个-之间的所有非-字符,能适配不同长度的区号。

验证更新结果

执行更新后,用以下语句查看效果:

SELECT phone_number, area_code FROM phone_log;

返回结果:

phone_numberarea_code
310-430-9201310
917-829-2876917
424-917-1055424

内容的提问来源于stack exchange,提问作者Joe Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:02:20