concat和concat_ws()区别及MySQL的几个实用字符串函数

1、()函数
     1.1 MySQL的concat函数可以连接一个或者多个字符串,如
         mysql> select concat('10');
         +--------------+
         | concat('10') |
         +--------------+
         | 10           |
         +--------------+
       1 row in set (0.00 sec)

       > select concat('11','22','33');
         +------------------------+
         | concat('11','22','33') |
         +------------------------+
         | 112233                 |
         +------------------------+

       1 row in set (0.00 sec)

       而Oracle的concat函数只能连接两个字符串

         SQL> select concat('11','22') from dual;

   1.2 MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

         mysql> select concat('11','22',null);
         +------------------------+
         | concat('11','22',null) |
         +------------------------+
         | NULL                   |
         +------------------------+
       1 row in set (0.00 sec)

       而Oracle的concat函数连接的时候,只要有一个字符串不是NULL,就不会返回NULL

         SQL> select concat('11',NULL) from dual;
       CONCAT
       --
       11

2、concat_ws()函数, 表示concat with separator,即有分隔符的字符串连接
     如连接后以逗号分隔
         mysql> select concat_ws(',','11','22','33');

         +-------------------------------+
         | concat_ws(',','11','22','33') |
         +-------------------------------+
         | 11,22,33                      |
         +-------------------------------+
       1 row in set (0.00 sec)

   和concat不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL
         mysql> select concat_ws(',','11','22',NULL);
         +-------------------------------+
         | concat_ws(',','11','22',NULL) |
         +-------------------------------+
         | 11,22                         |
         +-------------------------------+
       1 row in set (0.00 sec)

3、group_concat()可用来行转列, Oracle没有这样的函数

     完整的语法如下
     group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
   如下例子
     mysql> select * from aa;

     +------+------+
     | id   | name |
     +------+------+
     |    1 | 10   |
     |    1 | 20   |
     |    1 | 20   |
     |    2 | 20   |
     |    3 | 200  |
     |    3 | 500  |
     +------+------+
   6 rows in set (0.00 sec)
   3.1 以id分组,把name字段的值打印在一行,逗号分隔(默认)
       mysql> select id,group_concat(name) from aa group by id;
         +------+--------------------+
         | id   | group_concat(name) |
         +------+--------------------+
         |    1 | 10,20,20           |
         |    2 | 20                 |
         |    3 | 200,500            |
         +------+--------------------+

       3 rows in set (0.00 sec)

   3.2 以id分组,把name字段的值打印在一行,分号分隔
         mysql> 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                          |
         +------+----------------------------------+

       3 rows in set (0.00 sec)

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

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

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

       3 rows in set (0.00 sec)

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

         mysql> 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                               |
         +------+---------------------------------------+

       3 rows in set (0.00 sec)

4、repeat()函数,用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数

     mysql> select repeat('ab',2);

     +----------------+
     | repeat('ab',2) |
     +----------------+
     | abab           |
     +----------------+

   1 row in set (0.00 sec)

   又如
     mysql> select repeat('a',2);

     +---------------+
     | repeat('a',2) |
     +---------------+
     | aa            |
     +---------------+
   1 row in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值