MySQL中函数CONCAT 、CONCAT_WS、GROUP_

作者: 光剑书架上的书 | 来源:发表于2017-09-27 21:01 被阅读64次

    CONCAT_WS

    使用函数CONCAT_WS()。

    使用语法为:

    CONCAT_WS(separator,str1,str2,…)
    

    CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。

    第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。
    分隔符可以是一个字符串,也可以是其它参数。
    如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

    mysql> select concat_ws(',','x','y','z');
    +----------------------------+
    | concat_ws(',','x','y','z') |
    +----------------------------+
    | x,y,z                      |
    +----------------------------+
    1 row in set (0.00 sec)
    
    

    CONCAT

    CONCAT()函数用于将多个字符串连接成一个字符串。

    mysql> select concat(',','x','y','z');
    +-------------------------+
    | concat(',','x','y','z') |
    +-------------------------+
    | ,xyz                    |
    +-------------------------+
    1 row in set (0.00 sec)
    
    

    GROUP_CONCAT

    如果我们想把下面的查询列表拼接成逗号(,) 分隔的字符串,怎么搞呢?

    mysql> select a.id from article a limit 10;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    |  4 |
    |  5 |
    |  6 |
    |  7 |
    |  8 |
    |  9 |
    | 10 |
    +----+
    10 rows in set (0.00 sec)
    

    答案:使用GROUP_CONCAT

    
    mysql> select group_concat(a.id) from article a where a.id in
     (select t.id from (select id from article limit 10) t  );
    +----------------------+
    | group_concat(a.id)   |
    +----------------------+
    | 1,2,3,4,5,6,7,8,9,10 |
    +----------------------+
    1 row in set (0.00 sec)
    
    

    特别指出的是这里in后面的select子句的写法:

     (select t.id from (select id from article limit 10) t  )
    

    这里要注意的是,我们不能直接这么写

    mysql> select group_concat(a.id) from article a where a.id in (select a.id from article a limit 10);
    ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
    

    这也是mysql的子查询语法用起来不是那么“理所当然”的地方。

    相关文章

      网友评论

        本文标题:MySQL中函数CONCAT 、CONCAT_WS、GROUP_

        本文链接:https://www.haomeiwen.com/subject/lukpextx.html