1、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;
2、1.2 MySQL 的 concat 函数在连接字符串的时候,只要其中一个是 NULL,那么将返回 NULLmysql select concat(11,22,null);+-+| concat(11,22,null) |+-+| NULL |+-+1 row in set (0.00 sec)而 Oracle 的 concat 函数连接的时候,只要有一个字符串不是 NULL,就不会返回 NULLSQL select concat(11,NULL) from dual;CONCAT-112、concat_ws()函数, 表示 concat with separator,即有分隔符的字符串连接如
3、连接后以逗号分隔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 值而返回NULLmysql select concat_ws(,11,22,NULL);+-+| concat_ws(,11,22,NULL) |+-+| 11,22 |+-+1 row in set (0.00 sec)3、group_concat()可用来行转列, Oracle 没有这样
4、的函数完整的语法如下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
5、 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 |+-+
6、-+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,gr
7、oup_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)