MySQL函数


一、字符函数

(1)字符拼接

字符拼接–concat()

拼接字符串并作为列输出

语法:concat(str1, str2,...)

# 查询学生表中的数据,并将id、nam、score三字段拼接
select concat (id, name, score) as info from student;

指定分隔符拼接– concat_ws()

拼接字符串并作为列输出,指定字符串之间的分隔符

语法:concat_ws(separator, str1, str2, ...)

select concat_ws(',',id,name) s from student;

注:把分隔符指定为null,结果全部变成了null

对同字段进行分组拼接–group_concat()

语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

concat_ws() 的区别,concat_ws() 用于不同字段;group_concat() 用于同一字段,多用于分组查询

# 查询出所有user_id为1的数据,并将所有cargo_name以“,”作为分隔符拼接
select group_concat(o.cargo_name separator ',') a from t_order o where o.user_id=1

# 查询出所有user_id为1的数据,并以user_id倒序的方式将所有cargo_name以“,”作为分隔符拼接
select group_concat(o.cargo_name order by o.user_id desc separator ',') a from t_order o 

配合分组查询

select user_id,group_concat(o.cargo_name separator ',') cargo from t_order o group by o.user_id
user_id    cargo
1    苹果,梨,菠萝
2    菠萝,西瓜
3    南瓜

多表联查的使用

select u.id,u.name,(
    select group_concat(cargo_name separator ',') a 
    from t_order o 
    where o.user_id=u.id
) cargos
from t_user u
id    name    cargos
1    张三    苹果,梨,菠萝
2    李四    菠萝,西瓜
3    王五    南瓜

  目录