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

如何按大写字母拆分SQL表中Name列的连写姓名并添加空格?

解决连写姓名拆分的SQL方案

你的原SQL无法工作的核心原因是:原始姓名里没有空格,LOCATE(' ', name)会返回0,导致SUBSTRING的截取逻辑完全失效。需要换思路——找到姓名中首字符之后第一个大写字母的位置,插入空格拆分姓和名。

以下是不同SQL方言的可行方案:

MySQL/MariaDB

使用正则替换函数REGEXP_REPLACE,匹配小写字母后跟大写字母的位置,插入空格:

SELECT 
    REGEXP_REPLACE(name, '([a-z])([A-Z])', '$1 $2') AS full_name
FROM dim_players;

逻辑:正则([a-z])([A-Z])匹配姓名中所有小写字母接大写字母的位置,用$1 $2替换(保留原字符,中间加空格),一次完成所有拆分。

PostgreSQL

语法和MySQL类似,正则替换函数同样是REGEXP_REPLACE,仅捕获组引用方式略有不同:

SELECT 
    REGEXP_REPLACE(name, '([a-z])([A-Z])', '\1 \2') AS full_name
FROM dim_players;

SQL Server

SQL Server无直接正则替换函数,可通过STUFF结合PATINDEX实现:

SELECT 
    STUFF(name, PATINDEX('%[A-Z]%', SUBSTRING(name, 2, LEN(name))) + 1, 0, ' ') AS full_name
FROM dim_players;

逻辑:先截取第二个字符开始的子串,用PATINDEX找到其中第一个大写字母的位置,加1后定位到原字符串中需要插入空格的位置,最后用STUFF插入空格。

以上方案均可正确处理ViratKohli→Virat Kohli、ObedMcCoy→Obed McCoy这类场景。

内容的提问来源于stack exchange,提问作者Sanil Kumar Barik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:42:43