MySQL使用group_concat拼接前如何去除字段值指定后缀
字段值去固定后缀后分组拼接实现方案
完全可以在GROUP_CONCAT拼接执行前完成后缀移除,不需要提前落表预处理数据,直接在SELECT语句中嵌套字符串处理函数即可,以下是两种可直接复用的实现方式:
固定长度截取法(性能最优)
由于待移除的后缀-emotional是固定字符串,字符长度恒为10,可直接截取字段值从开头到「总字符数减10」的部分,再传入拼接函数,示例代码如下:SELECT GROUP_CONCAT( LEFT(your_column, CHAR_LENGTH(your_column) - 10) SEPARATOR '|' ) AS concat_result FROM your_table -- 按需添加分组、筛选条件即可 -- WHERE xxx -- GROUP BY group_column此处用
CHAR_LENGTH而非LENGTH,可以避免utf8mb4等多字节字符集下字节数、字符数不匹配导致的截取错位问题。字符串替换法(容错性更高)
如果无法100%确认所有字段值的后缀长度完全一致,可直接通过替换函数把-emotional替换为空字符串再拼接,不需要计算长度,写法更稳妥:SELECT GROUP_CONCAT( REPLACE(your_column, '-emotional', '') SEPARATOR '|' ) AS concat_result FROM your_table该写法对不含
-emotional后缀的字段值不会产生任何修改,不会出现误截取正常内容的问题。
如果你使用的是非MySQL系数据库,只需要把对应拼接函数替换为当前数据库支持的聚合拼接函数即可:PostgreSQL、SQL Server用
STRING_AGG,Oracle用LISTAGG,内部嵌套的字符串截取/替换逻辑完全通用。
内容的提问来源于stack exchange,提问作者DrowsyByNature
相关产品推荐
相关产品推荐

