萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql sql 字符連接函數Concat Concat_ws

mysql sql 字符連接函數Concat Concat_ws

Concat Concat_ws

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

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

 

copyright © 萬盛學電腦網 all rights reserved