mysql5.7 CONCAT() 、CONCAT_WS() 、GROUP_CONCAT() 相关使用记录

一、向表中某字段前后追加一段字符串

  //向后追加

    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语句同时使用才能产生效果

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值