MySQL-concat,concat_ws,group_concat的用法

concat()可以把字符串合并到一起,在对于需要判断两个不同条件的时候,比较有用,把两个条件进行合并,很简便,函数的参数和格式为:

concat(str1, str2,...)
其中str1,str2分别是需要连接的文本。
当其中一个参数为NULL时,整体输出为NULL。

例子:

select concat('1','NULL') from dual;

输出如下:


当其中有一个为NULL时:

select concat('1',NULL, '1') from dual;

注意,其中的NULL和之前的'NULL'不一样!
可以得到输出结果为:

concat_ws()函数

这个函数功能和concat是类似的,但是多了一个添加分隔符的功能,格式如下:

concat_ws(separator, str1, str2, ...)
其中separator是分隔符,从str1和str2之间开始添加。

例如:

SELECT
    concat_ws ( '/', 'NULL', '1' ) 
FROM
    DUAL;

可以得到输出为:


这个函数中,当字符串str1,str2等为NULL时,只是单纯的省略这个参数不加分隔符,但是字符串不会为NULL。

SELECT
    concat_ws ( '/', 'NULL', '1', NULL, '2' ) 
FROM
    DUAL;

输出为:



可以看到,第三个字符串的NULL被省略了。

当第一个参数(分隔符)为NULL时,整体为NULL。

SELECT
    concat_ws ( NULL, 'NULL', '1', NULL, '2' ) 
FROM
    DUAL;

输出为:


group_concat()

该函数需要配合group by关键字使用,作用是把分组出来的字段按组进行合并。格式如下:

group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

例如:
有表如下:


employee表
SELECT
    GROUP_CONCAT( MONTH order by salary desc separator '*') 
FROM
    employee 
GROUP BY
    Id

输出如下:


看起来比较难以理解,解释一下:

  • 按照id分组,分完之后,month的个数是不同的。
  • group_concat中第一个就是要合并的字段,这里是month,那就是把month合并到一起。
  • 第二个order by代表的是排列的顺序,按照salary降序排列,很明显输出结果是按照每个month的salary排序的。
  • 第三个是separator ,也就是分隔符。

在分组函数中进行连接,某些时候会比较方便。

你可能感兴趣的:(MySQL-concat,concat_ws,group_concat的用法)