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

发布于:2013年12月18日已被阅读

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)
5 查询表中的字段,查询出ID所有的值和共多少条
mysql> select * from user;
+------+------+
| id   | name |
+------+------+
|    1 | li   |
|    2 | ke   |
|    3 | he   |
|    4 | fa   |
|    5 | da   |
+------+------+
5 rows in set (0.00 sec)

mysql> select group_concat(id) from user;
+------------------+
| group_concat(id) |
+------------------+
| 1,2,3,4,5        |
+------------------+
1 row in set (0.02 sec)

1、mysql> select count(*) as c, group_concat(id) as cid from user;
2、mysql> select count(1) as c,group_concat(case(id as char)) as cid from user;
+---+-----------+
| c | cid       |
+---+-----------+
| 5 | 1,2,3,4,5 |
+---+-----------+
1 row in set (0.00 sec)

上一篇文章: Curl版本POST提交

下一篇文章: MySQL查询表内重复记录
热门博文
默认方法2(10114)
听过PHP吗(3497)
javascript是最棒的(1078)
Curl版本POST提交(191)
MySQL小技巧:让你忘记MySQL密码(180)
最新发布
css默认样式(136)
linux samba配置(144)
mysql经典语句(142)
js 中日期 转换成时间戳 例如2013(155)
MySQL字段拼接查询(152)
友情连接
80年代
百度
京ICP备14027197号-1 网站版权归80年代博客所有
正在加载中……