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

PostgreSQL中如何将name列拆分为first_name与last_name列

PostgreSQL 拆分姓名列:处理含头衔(Mrs/Ms)的场景

你当前使用的查询仅按第一个空格拆分姓名,遇到带Mrs/Ms头衔的姓名(如Ms Ana Rodriguez)时,会错误地将Ms 作为first_name,剩余部分作为last_name,无法满足拆分需求。

原查询代码:

SELECT substring(name from 1 for (POSITION(' ' IN name))) "first_name" 
      ,substring(name from (POSITION(' ' IN name))+1) "last_name"
FROM flores_comahue fc 

解决方案:正则匹配处理头衔

通过正则表达式识别头衔前缀,针对性拆分first_name和last_name,支持不区分大小写匹配各类头衔写法(如Mrs/mrs/MS):

方法1:数组拆分+条件判断

SELECT
  CASE
    WHEN name ~* '^(mrs|ms)\s' THEN array_to_string((regexp_split_to_array(name, '\s+'))[1:2], ' ')
    ELSE (regexp_split_to_array(name, '\s+'))[1]
  END AS first_name,
  CASE
    WHEN name ~* '^(mrs|ms)\s' THEN array_to_string((regexp_split_to_array(name, '\s+'))[3:], ' ')
    ELSE array_to_string((regexp_split_to_array(name, '\s+'))[2:], ' ')
  END AS last_name
FROM flores_comahue;

方法2:正则直接提取子串

SELECT
  substring(name from '^(mrs|ms)\s+\S+|\S+') AS first_name,
  substring(name from '^(mrs|ms)\s+\S+\s+(.*)|\S+\s+(.*)') AS last_name
FROM flores_comahue;

说明

  • ~* 用于不区分大小写的正则匹配,覆盖Mrs/ms等各种大小写形式
  • 若需要支持更多头衔(如Mr/Dr),只需在正则的(mrs|ms)部分添加对应的选项,比如(mrs|ms|mr|dr)
  • 两种方法均能处理姓名中多个连续空格的情况

内容的提问来源于stack exchange,提问作者Miroshnitshenko Patricio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:35:19