Mysql常用函数之Concat函数

Mysql字符串连接函数

这里主要说下mysql连接字符串函数的使用

Concat函数

语法结构:

  CONCAT(str1,str2,…) 

返回的结果各个参数连接成的字符串。若有值为NULL的参数 ,则最终的结果为 NULL

需要注意的点:

  • 如果参数都是非二进制字符串,那结果也是非二进制字符串。

  • 如果参数中含有任一二进制字符串,那结果是一个二进制字符串。

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)

MySQL的Concat函数在使用的时候,只要参数传入了NULL,那么结果就是NULL

 mysql> select concat('11','22',null);
 +------------------------+
 | concat('11','22',null) |
 +------------------------+
 | NULL |
 +------------------------+
1 row in set (0.00 sec)

Concat_ws函数

语法结构:

  CONCAT_WS(separator,str1,str2,...)

CONCAT_WS() (CONCAT With Separator) ,是CONCAT()的特殊形式。第一个参数为分隔符。分隔符的位置用来分割后面的字符串参数。分隔符可是一个字符串,也可以是其它参数。

需要质疑的点:

  • 如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

如连接参数以逗号分隔 :

  mysql> select concat_ws(',','11','22','33');

  +-------------------------------+
  | concat_ws(',','11','22','33') |
  +-------------------------------+
  | 11,22,33 |
  +-------------------------------+
  1 row in set (0.00 sec)

concat_ws函数和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)

MySQL中group_concat函数

语法结构如下:

   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)

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

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

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

以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()函数

repeat函数用来进行字符串的复制,如下’ab’表示要复制的字符串,2表示复制的份数

   mysql> select repeat('ab',2);

   +----------------+
    | repeat('ab',2) |
   +----------------+
   | abab |
  +----------------+
  1 row in set (0.00 sec)
上一篇:MySQL group_concat 长度限制


下一篇:[JavaEE]连接数据库遇到的问题