如何通过substr与split_part生成姓名首字母缩写?
姓名转首字母缩写的SQL实现
针对你需要将任意长度的空格分隔姓名转换为M.P.H格式首字母缩写的需求,用数组拆分+聚合的方式可以完美避免硬编码,以下是PostgreSQL环境下的具体实现:
-- 假设你的姓名字段名为full_name,替换成实际字段名即可 SELECT string_agg(upper(substr(name_part, 1, 1)), '.') AS initials FROM unnest(string_to_array(full_name, ' ')) AS name_part WHERE name_part <> '';
代码解释:
string_to_array(full_name, ' '):把姓名按空格拆分为数组,比如Marco Peter Hanson会变成['Marco', 'Peter', 'Hanson']unnest(...):将数组展开为单独的行,每个姓名部分占一行substr(name_part, 1, 1):提取每个姓名部分的第一个字符upper(...):将首字母转为大写(如果不需要大写可以去掉)string_agg(..., '.'):把所有首字母用.连接成最终的缩写格式WHERE name_part <> '':过滤掉因连续空格产生的空字符串,避免出现多余的.
测试场景验证:
- 输入
Marco Peter→ 输出M.P - 输入
Maro Peter Hanson Brad→ 输出M.P.H.B - 输入
Marco Peter Hanson(含连续空格)→ 输出M.P.H
内容的提问来源于stack exchange,提问作者MOR_SNOW
相关产品推荐
相关产品推荐

