SQL格式化name列:统一姓名大小写与分隔格式问题求助
SQL姓名格式化问题解决方法
针对name_matrix表中name列格式混乱(逗号后带/不带空格、大小写不统一)的问题,核心解决思路是先清理拆分后的空白字符,再进行大小写格式化,以下是几种可行方案:
方案1:拆分后直接清理空格+手动格式化大小写
适用于不支持INITCAP函数的数据库:
SELECT UPPER(LEFT(TRIM(split_part(name, ',', 2)), 1)) || LOWER(SUBSTRING(TRIM(split_part(name, ',', 2)), 2)) AS firstname, UPPER(LEFT(TRIM(split_part(name, ',', 1)), 1)) || LOWER(SUBSTRING(TRIM(split_part(name, ',', 1)), 2)) AS lastname FROM name_matrix;
TRIM(split_part(...)):去除拆分结果前后的所有空白字符(包括逗号后的空格),确保后续处理的是纯姓名内容UPPER(LEFT(...)) || LOWER(SUBSTRING(...)):手动实现首字母大写、其余字母小写的格式
方案2:先统一姓名格式再拆分
先预处理name列,把所有, (逗号+空格)替换为, ,消除格式差异后再拆分:
WITH cleaned_names AS ( SELECT REPLACE(name, ', ', ',') AS cleaned_name FROM name_matrix ) SELECT UPPER(LEFT(split_part(cleaned_name, ',', 2), 1)) || LOWER(SUBSTRING(split_part(cleaned_name, ',', 2), 2)) AS firstname, UPPER(LEFT(split_part(cleaned_name, ',', 1), 1)) || LOWER(SUBSTRING(split_part(cleaned_name, ',', 1), 2)) AS lastname FROM cleaned_names;
方案3:用INITCAP简化格式化(PostgreSQL等支持该函数的数据库)
INITCAP函数可自动将字符串每个单词的首字母大写、其余小写,配合TRIM一步完成:
SELECT INITCAP(TRIM(split_part(name, ',', 2))) AS firstname, INITCAP(TRIM(split_part(name, ',', 1))) AS lastname FROM name_matrix;
内容的提问来源于stack exchange,提问作者mack
相关产品推荐
相关产品推荐

