一、向表中某字段前后追加一段字符串
//向后追加
update table_name set field=CONCAT(field, '分隔符', str) where 条件;//'分隔符',可以为空,也可以省略
update table_name set field=CONCAT(field, str);
//向前追加
update table_name set field=CONCAT(str, field);
update table_name set field=CONCAT_WS('分隔符', field, str);//注意field前面的'分隔符'不能省略,但可以为空,否则会把原字段中所有内容替换为str,切记!
注意:concat使用方式
1、任何一个参数为NULL ,则返回值为 NULL;所有参数均为非二进制字符串,则结果为非二进制字符串;自变量中含有任一二进制字符串,则结果为一个二进制字符串
2、CONCAT_WS代替CONCAT比较通用
3、执行语句可能会报错:
[Err] 1265 - Data truncated for column 'shopType' at row 1
在windows my.ini或者linux ~/my.cnf中,添加sql-mode=MYSQL40 重启ok
可以参考:https://blog.csdn.net/weixin_33774308/article/details/94245443
4、CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起
select concat(nickname,age,gender) from t_wx_user_info where id=1;
二、在mybatis 中其中使用concat拼接
select * table_name A where A.name like concat( '%' , '#{name}' , '%' ) ;
三、GROUP_CONCAT函数:
1、单表将多条记录的单个字段合并成一条记录
SELECT GROUP_CONCAT(nickName) name FROM table_name; //将table_name表字段nickNamel列值合并为行值
SELECT GROUP_CONCAT(city SEPARATOR '|') city FROM table_name;//用SEPARATOR 关键词指定连接符
SELECT GROUP_CONCAT(nickName) name,age FROM t_wx_user_info group by age LIMIT 5; //age分组,相同age的name合并为一行
二、数据库中一对多的关系,将多条记录整理成一条记录显示到列表中
如有表:sys_user用户表,sys_role角色表,sys_user_role用户角色关系表三张
管理查询语句:
select u.user_id,u.user_name,r.role_name from sys_user u
left join sys_user_role ur on u.user_id=ur.user_id
left join sys_role r on ur.role_id=r.role_id
where u.user_id=2
把以上数据分组合并到一行,那就用group_concat()函数,如查询语句:
select u.user_id,u.user_name,group_concat(r.role_name) roleName
from sys_user u left join sys_user_role ur
on u.user_id=ur.user_id left join sys_role r
on ur.role_id=r.role_id where u.user_id=2
group by u.user_name;
注:group_concat只有与group by语句同时使用才能产生效果