concat和concat_ws()區別及MySQL的幾個實用字符串函數【轉】

一、 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

二、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 )

三、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 )

四、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 )
相關文章
相關標籤/搜索