MySQL的幾個實用字符串函數 (轉)

MySQL的幾個實用字符串函數 (轉) 收藏

最近老婆問我要一個在mysql裏做行列轉換的sql語句,想了半天沒想出來,還是去網上搜一下吧,然後就發現了這篇文章,非常實用,特轉過了一起分享:)

原文地址:http://blog.54master.com/index.php/316158/viewspace-20836

MySQL的幾個實用字符串函數

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  |
   +------+------+
   |    
10    |
   |    
20    |
   |    
20    |
   |    
20    |
   |    
200   |
   |    
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 ) |
       +------+--------------------+
       |    
10 , 20 , 20            |
       |    
20                  |
       |    
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  ';' ) |
       +------+----------------------------------+
       |    
10 ; 20 ; 20                          |
       |    
20                                |
       |    
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 ) |
       +------+-----------------------------+
       |    
10 , 20                        |
       |    
20                           |
       |    
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 ) |
       +------+---------------------------------------+
       |    
20 , 20 , 10                               |
       |    
20                                     |
       |    
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 )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章