MySQL系列(一)——concat系列函数

本文介绍了MySQL中的三个字符串连接函数:concat用于无分隔符连接字符串,当遇到NULL时返回NULL;concat_ws则允许指定分隔符,分隔符为NULL时结果为NULL,但会忽略NULL参数;而group_concat主要用于聚合连接,可去除重复值并自定义分隔符。

(1)concat函数:用于将两个及以上字符串连接起来,形成一个单一的字符串

语法:concat(字段1,字段2,...)

注意:如果连接串中存在NULL,则返回结果为NULL。

例:

mysql> select concat('2022','03','22');
+--------------------------+
| concat('2022','03','22') |
+--------------------------+
| 20220322                 |
+--------------------------+
1 row in set (0.00 sec)

mysql> select concat('2022','03','22',null);  #连接串中存在NULL,则返回结果为NULL
+-------------------------------+
| concat('2022','03','22',null) |
+-------------------------------+
| NULL                          |
+-------------------------------+
1 row in set (0.00 sec)

(2)concat_ws函数:相比concat函数可以指定分隔符,用于两个及以上字符串的连接

语法:concat_ws('分隔符',字段1,字段2,...)

注意:如果分隔符为NULL,则返回结果为NULL;如果参数中存在NULL,则会被忽略。

例:

mysql> select concat_ws('-','2022','03','22');
+---------------------------------+
| concat_ws('-','2022','03','22') |
+---------------------------------+
| 2022-03-22                      |
+---------------------------------+
1 row in set (0.00 sec)

mysql> select concat_ws(null,'2022','03','22');  #分隔符为NULL,则返回结果为NULL
+----------------------------------+
| concat_ws(null,'2022','03','22') |
+----------------------------------+
| NULL                             |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select concat_ws('-','2022','03','22',null);  #参数中存在NULL,则会被忽略
+--------------------------------------+
| concat_ws('-','2022','03','22',null) |
+--------------------------------------+
| 2022-03-22                           |
+--------------------------------------+
1 row in set (0.00 sec)

(3)group_concat函数

语法:

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

注:使用distinct可以排除重复值;分隔符可以省略,默认为逗号。

例:

mysql> select empno,ename,deptno from emp;
+-------+--------+--------+
| empno | ename  | deptno |
+-------+--------+--------+
|  7369 | SMITH  |     20 |
|  7499 | ALLEN  |     30 |
|  7521 | WARD   |     30 |
|  7566 | JONES  |     20 |
|  7654 | MARTIN |     30 |
|  7698 | BLAKE  |     30 |
|  7782 | CLARK  |     10 |
|  7788 | SCOTT  |     20 |
|  7839 | KING   |     10 |
|  7844 | TURNER |     30 |
|  7876 | ADAMS  |     20 |
|  7900 | JAMES  |     30 |
|  7902 | FORD   |     20 |
|  7934 | MILLER |     10 |
+-------+--------+--------+
14 rows in set (0.00 sec)

mysql> select deptno,group_concat(ename separator',') as employees
    -> from emp
    -> group by deptno;
+--------+--------------------------------------+
| deptno | employees                            |
+--------+--------------------------------------+
|     10 | CLARK,KING,MILLER                    |
|     20 | SMITH,JONES,SCOTT,ADAMS,FORD         |
|     30 | ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES |
+--------+--------------------------------------+
3 rows in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值