MySQL中的函数总结

CONCAT()函数

CONCAT()函数用于将多个字符串连接成一个字符串。
使用数据表sys_user作为示例,sql如下:

SELECT user_id as id,zwxm as name FROM sys_user LIMIT 1;

返回结果如下:

1
2
3
4
5
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
+----+--------+

1、语法及使用特点:

CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。可以有一个或多个参数。

2、使用示例:

SELECT CONCAT(user_id, ‘,’, zwxm) AS con FROM sys_user LIMIT 1;
返回结果如下:

1
2
3
4
5
+----------+
| con |
+----------+
| 1,张三 |
+----------+

SELECT CONCAT(‘My’, NULL, ‘QL’);

返回结果如下:

1
2
3
4
5
+--------------------------+
| CONCAT('My', NULL, 'QL') |
+--------------------------+
| NULL |
+--------------------------+

CONCAT_WS()函数

使用语法为:· CONCAT_WS(separator,str1,str2,…) ·
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

示例1:

SELECT CONCAT_WS('_',user_id,zwxm) AS con_ws FROM sys_user LIMIT 1;

返回结果:

1
2
3
4
5
+----------+
| con_ws |
+----------+
| 1_张三 |
+----------+

示例2:

SELECT CONCAT_WS(',','First name',NULL,'Last Name');

返回结果:

1
2
3
4
5
+----------------------------------------------+
| CONCAT_WS(',','First name',NULL,'Last Name') |
+----------------------------------------------+
| First name,Last Name |
+----------------------------------------------+

GROUP_CONCAT()函数

语法如下:

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

基本查询:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> select * from test; 
+------+------+
| id| name |
+------+------+
|1 | 10 |
|1 | 20 |
|1 | 20 |
|2 | 20 |
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)

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

1
2
3
4
5
6
7
8
9
mysql> select id,group_concat(name) from test group by id; 
+------+--------------------+
| id | group_concat(name) |
+------+--------------------+
|1 | 10,20,20 |
|2 | 20 |
|3 | 200,500 |
+------+--------------------+
3 rows in set (0.00 sec)

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

1
2
3
4
5
6
7
8
9
mysql> select id,group_concat(name separator ';') from test group by id; 
+------+----------------------------------+
| id | group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|2 | 20 |
|3 | 200;500 |
+------+----------------------------------+
3 rows in set (0.00 sec)

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

1
2
3
4
5
6
7
8
9
mysql> select id,group_concat(distinct name) from test group by id; 
+------+-----------------------------+
| id | group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20 |
|2 | 20 |
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)

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

1
2
3
4
5
6
7
8
9
mysql> select id,group_concat(name order by name desc) from test group by id; 
+------+---------------------------------------+
| id | group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20 |
|3 | 500,200 |
+------+---------------------------------------+
3 rows in set (0.00 sec)

使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。
将环境变量group_concat_max_len 增大。默认是1024。本地设置了session级的环境变量将其变为2048(不够用再加大)

本文标题:MySQL中的函数总结

文章作者:王洪博

发布时间:2018年03月22日 - 15:03

最后更新:2020年02月10日 - 03:02

原始链接:http://whb1990.github.io/posts/578ec873.html

▄︻┻═┳一如果你喜欢这篇文章,请点击下方"打赏"按钮请我喝杯 ☕
0%