SQL Server 2016 如何从fullname字段中拆分提取FirstName和LastName
SQL Server 2016 拆分姓名字段实现方案
现有fullname字段格式统一为「名 姓 (备注信息)」,我们可以通过CHARINDEX定位分隔符位置,再用SUBSTRING截取对应内容即可,适配SQL Server 2016版本的查询语句如下:
Select FirstName = LTRIM(RTRIM(SUBSTRING(fullname, 1, CHARINDEX(' ', fullname) - 1))) ,LastName = LTRIM(RTRIM(SUBSTRING(fullname, CHARINDEX(' ', fullname) + 1, CHARINDEX('(', fullname) - CHARINDEX(' ', fullname) - 1))) FROM #Test
执行后输出结果和预期完全匹配:
| FirstName | LastName |
|---|---|
| Jose | Mendez |
| Bob | Smith |
| Frank | Goza |
如果需要兼容姓名中间存在连续空格、或格式不规范的脏数据,可以增加替换逻辑和异常判断避免报错:
Select FirstName = CASE WHEN CHARINDEX(' ', fullname) > 0 THEN LTRIM(RTRIM(SUBSTRING(REPLACE(fullname, ' ', ' '), 1, CHARINDEX(' ', REPLACE(fullname, ' ', ' ')) - 1))) ELSE fullname END ,LastName = CASE WHEN CHARINDEX(' ', fullname) > 0 AND CHARINDEX('(', fullname) > CHARINDEX(' ', fullname) THEN LTRIM(RTRIM(SUBSTRING(REPLACE(fullname, ' ', ' '), CHARINDEX(' ', REPLACE(fullname, ' ', ' ')) + 1, CHARINDEX('(', REPLACE(fullname, ' ', ' ')) - CHARINDEX(' ', REPLACE(fullname, ' ', ' ')) - 1))) ELSE '' END FROM #Test
内容的提问来源于stack exchange,提问作者Bob Goblin
相关产品推荐
相关产品推荐

