05-常用函数group_concat,concat_ws(),find_in_set()

文章介绍了MySQL中的三个字符串处理函数:GROUP_CONCAT用于将相同行的字段值合并,CONCAT_WS允许指定分隔符连接字符串,而FIND_IN_SET则用于在逗号分隔的列表中查找特定字符串的索引位置。示例展示了这些函数的用法和参数详细说明。
摘要由CSDN通过智能技术生成

group_concat()

能将相同的行组合起来

完整语法

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

使用实例

+------+------+
|  id  | name |
+------+------+
|id    | name |
|1     | 10   |
|1     | 20   |
|1     | 20   |
|2     | 20   |
|3     | 200  |
|3     | 500  |

以id分组,把name字段的值打印在一行,逗号分隔(默认)

select id, group_concat(name) from aa group by id;  

+------+--------------------+
|  id  | group_concat(name) |
+------+--------------------+
|1     | 10,20,20           |
|2     | 20                 |
|3     | 200,500            |
+------+--------------------+

指定分隔符

select id,group_concat(name separator '/')  from aa group by id; 

+------+----------------------------------+
| id   | group_concat(name separator ';') |
+------+----------------------------------+
|1     | 10/20/20                         |
|2     | 20                               |
|3     | 200/500                          |
+------+----------------------------------+

去掉冗余值(distinct的使用)

以id分组,把去冗余的name字段的值打印在一行

select id, group_concat(distinct name) from aa group by id;  

+------+-----------------------------+
| id   | group_concat(distinct name) |
+------+-----------------------------+
|1     | 10,20                       |
|2     | 20                          |
|3     | 200,500                     |
+------+-----------------------------+

排序

以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序

select id,group_concat(name order by name desc) from aa group by id;

+------+---------------------------------------+
| id   | group_concat(name order by name desc) |
+------+---------------------------------------+
|1     | 20,20,10                              |
|2     | 20                                    |
|3     | 500,200                               |
+------+---------------------------------------+

concat_ws()

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

语法

concat_ws(separator, str1, str2, …) 第一个参数指定分隔符, 后面依旧是字符串

**注意:**分隔符不能为null,如果为null,则返回结果为null。

使用实例

以逗号分割

select concat_ws(',', pname, page, psex) from per;  

 +-----------------------------------+
 | concat_ws(',', pname, page, psex) |
 +-----------------------------------+
 | 王小华,30,|
 | 张文军,24,|
 | 罗敏,19,|
 +-----------------------------------+

分隔符指定为null

select concat_ws(null, pname, page, psex) from per;
 +------------------------------------+
 | concat_ws(null, pname, page, psex) |
 +------------------------------------+
 | NULL                               |
 | NULL                               |
 | NULL                               |
 +------------------------------------+

find_in_set()

FIND_IN_SET(str, strlist)

str 要查询的字符串

strlist 字段名 参数以”,”分隔 如 (1, 2, 6, 8, 10, 22)

查询字段(strlist)中包含(str)的结果,返回结果为索引位置(索引值从1开始)或null

如果str不在strlist 或 strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL

SELECT FIND_IN_SET('b', 'a,b,c,d'); -- 返回值为2
SELECT FIND_IN_SET('1', '1');       -- 返回值为1
SELECT FIND_IN_SET('2', '1,2');    -- 返回值为2
SELECT FIND_IN_SET('6', '1');       -- 返回0 strlist中不存在str,所以返回0。
SELECT FIND_IN_SET(null, '1');      -- 返回值为null
SELECT FIND_IN_SET('6', null);      -- 返回值为null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值