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

如何用REGEXP_SUBSTR提取含单/双首字母的姓氏?

提取姓名中的姓氏:修正正则表达式方案

要提取姓名中最后一个单词作为姓氏(不管前面有多少个首字母),你需要调整正则表达式,匹配字符串末尾的最后一个非空格序列。

问题原因

你之前使用的\s.+$会匹配第一个空格后的所有内容,遇到多首字母姓名(如F D Peat)时,会把D Peat全部返回;而\s{2,}.+$要求两个及以上空格分隔,不符合你的数据格式;\s.{2,}+$依然会包含中间的首字母,无法精准定位到最后一个姓氏。

正确正则表达式及SQL语句

使用\S+$作为正则表达式,它会匹配字符串末尾的所有非空格字符(也就是最后一个单词):

SELECT NAMES, REGEXP_SUBSTR(NAMES, '\S+$') AS LAST_NAME FROM PEOPLE

如果你的SQL方言(如Oracle)支持捕获组索引,可以指定取第一个捕获组的内容,写法如下:

SELECT NAMES, REGEXP_SUBSTR(NAMES, '(\S+)$', 1, 1, NULL, 1) AS LAST_NAME FROM PEOPLE

效果验证

针对你的数据,执行后会得到期望结果:

Column ALAST_NAME
A PeatPeat
D JonesJones
F PeatPeat
D JonesJones
F D PeatPeat
D JonesJones

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:45:53