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_number | area_code |
|---|---|
| 310-430-9201 | 310 |
| 917-829-2876 | 917 |
| 424-917-1055 | 424 |
内容的提问来源于stack exchange,提问作者Joe Lee
相关产品推荐
相关产品推荐

