【数据库】Mysql获取以逗号隔开字符串的第一个元素

场景需求

有时会通过group_concat 获取一个分组查询后的字段以逗号隔开的字符串,而且还要按照时间排序取第一个
通俗的讲就是 获取时间最新的另一个字段的值

分组查询可以这么写:

group_concat(create_person order by create_time desc) as create_persons

以下查询sql中全部用 create_persons ,省略group_concat部分

具体实现

那么要取第一个有两种方法实现:

1、通过方法 SUBSTRING_INDEX

SUBSTRING_INDEX(create_persons,',', 1)  

简单解释:
a、SUBSTRING_INDEX: 取一段字符串按照 特殊字符 分组后的 第几个字符串
b、第一个是从1开始的

2、通过方法 left 和 LOCATE

LEFT(create_persons, LOCATE(',',create_persons)-1)  

简单解释:
a、LEFT(str, length):mysql左截取
b、LOCATE(substr,str):返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0

总结

第一种方案 更加的简约易懂
第二种略显繁杂,而且还有一个问题,如果字符串没有逗号,将无法获取到值,所以还得优化为一下sql

left(create_persons, if(LOCATE(',',create_persons)=0,length(create_persons),LOCATE(',',create_persons)-1))  

是不是更复杂了,所以个人建议第一种

如果有更好的方案,欢迎留言讨论哟

你可能感兴趣的:(数据库,mysql,数据库)