MS SQL Server 2019提取括号内昵称并拆分无昵称完整姓名求助
SQL Server 2019 人员姓名拆分实现方案
以下代码可以同时满足你两个需求,同时修复了原昵称提取逻辑的边界问题:无括号、括号内无有效字母、括号位置异常等场景都会返回符合预期的结果。
SELECT PersonName AS 原姓名字段, -- 提取仅含字母的昵称,无有效昵称返回NULL CASE -- 先判断是否存在有效的左右括号对 WHEN CHARINDEX('(', PersonName) > 0 AND CHARINDEX(')', PersonName) > CHARINDEX('(', PersonName) THEN -- 提取括号内内容后过滤只保留英文字母 (SELECT STRING_AGG(c, '') FROM STRING_SPLIT(SUBSTRING(PersonName, CHARINDEX('(', PersonName) + 1, CHARINDEX(')', PersonName) - CHARINDEX('(', PersonName) - 1), '') WHERE c LIKE '[a-zA-Z]') ELSE NULL END AS NickName, -- 生成去掉括号及内容的完整姓名,自动合并多余空格 TRIM(REPLACE(REPLACE(PersonName, CASE WHEN CHARINDEX('(', PersonName) > 0 AND CHARINDEX(')', PersonName) > CHARINDEX('(', PersonName) THEN SUBSTRING(PersonName, CHARINDEX('(', PersonName), CHARINDEX(')', PersonName) - CHARINDEX('(', PersonName) + 1) ELSE '' END, ''), ' ', ' ')) AS FullName FROM dbo.Person
测试效果
对应你给出的示例数据,返回结果如下:
| 原PersonName | NickName | FullName |
|---|---|---|
| John (Johnny) Hendricks | Johnny | John Hendricks |
| Zekeraya (Zeke) Smith | Zeke | Zekeraya Smith |
| Ajamain Sterling (Aljo) | Aljo | Ajamain Sterling |
| Beth ()) Jackson | NULL | Beth Jackson |
内容的提问来源于stack exchange,提问作者fender120
相关产品推荐
相关产品推荐

