如何使用REVERSE与CHARINDEX函数提取姓名中的姓氏?
提取姓氏的SQL解决方案
核心逻辑
你已经找对了关键节点:用CHARINDEX(' ', REVERSE(Name))定位反转后姓名里第一个空格的位置,这个数值恰好是原姓名中姓氏的长度 + 1。接下来只需要两步就能拿到正常顺序的姓氏:
- 从反转后的姓名里截取到该空格前的片段(也就是反转状态的姓氏)
- 将截取结果再次反转,恢复姓氏的正常顺序
完整SQL代码
SELECT Name, REVERSE(SUBSTRING(REVERSE(Name), 1, CHARINDEX(' ', REVERSE(Name)) - 1)) AS LastName FROM YourTableName;
代码拆解
REVERSE(Name):把原姓名反转,比如John Michael Smith会变成htimS leahciM nhoJCHARINDEX(' ', REVERSE(Name)):找到反转后第一个空格的位置,这里是5(对应htimS后的空格)SUBSTRING(REVERSE(Name), 1, CHARINDEX(' ', REVERSE(Name)) - 1):从反转字符串的第1位开始,截取长度为5-1=4的字符,得到htimSREVERSE(...):把htimS反转回原姓氏Smith
测试示例
| 原姓名 | 提取结果 |
|---|---|
| John Doe | Doe |
| Emily Marie Johnson | Johnson |
| Robert Brown | Brown |
边界情况优化
如果存在单名(无空格)的情况,上面的代码会报错,可加判断处理:
SELECT Name, CASE WHEN CHARINDEX(' ', Name) = 0 THEN Name ELSE REVERSE(SUBSTRING(REVERSE(Name), 1, CHARINDEX(' ', REVERSE(Name)) - 1)) END AS LastName FROM YourTableName;
内容的提问来源于stack exchange,提问作者Vnjack
相关产品推荐
相关产品推荐

