对照Oracle,MySQL的几个实用字符串函数

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

       
mysqlselect 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',NULLfrom 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字段的值打印在一行,逗号分隔(默认)
       
mysqlselect id,group_concat(namefrom 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 namefrom 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 descfrom 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)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值