写点什么

mysql 的 FIND_IN_SET group_concat 函数

作者:Rubble
  • 2022 年 4 月 04 日
  • 本文字数:769 字

    阅读完需:约 3 分钟

FIND_IN_SET 函数

此函数适合多选条件保存在一个字段中的情景,查询是否满足条件时用 find_in_set 函数


 FIND_IN_SET(str,strlist)
复制代码


strlist 字段名 参数以”,”分隔 如 (1,2,3)


如某项业务支持的地区数据库存放地区的编码 area 字段 'c001,c002,c003',用来检测某业务是否符合地区 c001 的 sql 如下


select * from t_tab1 where find_in_set('c001',area);
复制代码

concat 函数

常用的链接字符函数语法:


 concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
复制代码


演示:


 select concat (id,'-', name) as info from t1;
复制代码


在 mybatis 中常用来拼接 %来进行模糊查询


    <if test="user.userName != null  and user.userName != ''">      and user_name like concat(#{user.userName}, '%')    </if>
复制代码

concat_ws()函数

  1. 含义:


和 concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws 就是 concat with separator)


2. 语法:


concat_ws(separator, str1, str2, ...)


说明:第一个参数指定分隔符。需要注意的是分隔符不能为 null,如果为 null,则返回结果为 null。


select concat_ws(',',id ,name) as info from t1;
复制代码

group_concat

FIND_IN_SET 在数据库中多个值存放在一个字段中,group_concat 正好相反,数据库中存放多条记录,分组查询后变成一条语句。


函数语法:


group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
复制代码


如订单商品,一个订单有多个商品,想统计订单购买了哪些商品 sku 表结构大致:order_no,sku_no 等统计 sql 如下


select order_no, group_concat(sku_no) from order_goods group by sku_no; 
复制代码


指定分割符号,默认","


select order_no, group_concat(sku_no separator ';') from order_goods group by sku_no; 
复制代码


查询结果大致:



此函数在一些数据统计中经常使用。

用户头像

Rubble

关注

还未添加个人签名 2021.06.01 加入

还未添加个人简介

评论

发布
暂无评论
mysql的FIND_IN_SET group_concat 函数_MySQL_Rubble_InfoQ写作平台