当前位置:Gxlcms > 数据库问题 > MySQL拼接函数使用介绍

MySQL拼接函数使用介绍

时间:2021-07-01 10:21:17 帮助过:10人阅读

MySQL拼接函数使用介绍:

MySQL常见的拼接的函数有3种
concat concat_ws group_concat
下面简单介绍下MySQL拼接函数的concat_ws和concat的使用,
具体的使用方法可以登录MySQL shell 进行help concat ; concat concat_ws ; concat_ws group_concat 来查看帮助

一.CONCAT()函数介绍:

1.1CONCAT()函数介绍:

CONCAT()函数用于将多个字符串连接成一个字符串,但是它不能指定字符作为拼接符号进行拼接字符串
语法及使用特点:
CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。可以有一个或多个参数。
官方给出的例子:

  1. <code>Examples:
  2. mysql> SELECT CONCAT(‘My‘, ‘S‘, ‘QL‘);
  3. -> ‘MySQL‘
  4. mysql> SELECT CONCAT(‘My‘, NULL, ‘QL‘);
  5. -> NULL
  6. mysql> SELECT CONCAT(14.3);
  7. -> ‘14.3‘</code>
  1. <code>root@localhost [test02]>SELECT concat(‘-‘,1,22,‘你好‘) display_name;
  2. +--------------+
  3. | display_name |
  4. +--------------+
  5. | -122你好 |
  6. +--------------+
  7. 1 row in set (0.00 sec)</code>

使用concat函数时拼接的字符中有一个为NULL时,字符串进行拼接后则整体变成了NULL

  1. <code>root@localhost [test02]>SELECT concat(‘-‘,1,22,‘你好‘,NULL) display_name;
  2. +--------------+
  3. | display_name |
  4. +--------------+
  5. | NULL |
  6. +--------------+
  7. 1 row in set (0.00 sec)
  8. root@localhost [test02]>SELECT concat(‘-‘,1,‘你好‘,NULL,22) display_name;
  9. +--------------+
  10. | display_name |
  11. +--------------+
  12. | NULL |
  13. +--------------+
  14. 1 row in set (0.00 sec)</code>

1.2 concat函数简单使用介绍:

让MySQL中test01库里面所有的表数据迁移到test02库里面

root@localhost [information_schema]&gt;select concat("rename table test01.", table_name," to test02.",table_name,";") from tables where table_schema=‘test01‘ into outfile ‘/tmp/1.sql‘;
Query OK, 2 rows affected (0.00 sec)

  1. <code>[root@VM_82_178_centos tmp]# cat /tmp/1.sql
  2. rename table test01.student3 to test02.student3;
  3. rename table test01.test1_event to test02.test1_event;</code>
  1. <code>root@localhost [information_schema]>source /tmp/1.sql
  2. Query OK, 0 rows affected (0.10 sec)
  3. Query OK, 0 rows affected (0.05 sec)
  4. root@localhost [test02]>show tables;
  5. +------------------+
  6. | Tables_in_test02 |
  7. +------------------+
  8. | student3 |
  9. | test1_event |
  10. +------------------+
  11. 2 rows in set (0.01 sec)
  12. root@localhost [test02]>use test01;
  13. Database changed
  14. root@localhost [test01]>show tables;
  15. Empty set (0.00 sec)</code>

二.CONCAT_WS()函数介绍:

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

2.1 concat_ws函数可以指定字符串之间的分隔符进行字符串拼接实例演示:

指定分隔符“-”进行拼接:

  1. <code>root@localhost [test02]>SELECT concat_ws(‘-‘,1,22,‘你好‘) display_name;
  2. +--------------+
  3. | display_name |
  4. +--------------+
  5. | 1-22-你好 |
  6. +--------------+
  7. 1 row in set (0.00 sec)</code>

后面为空的时候也可以拼接:

  1. <code>root@localhost [test02]>SELECT concat_ws(‘-‘,1,22,‘你好‘,‘‘) display_name;
  2. +--------------+
  3. | display_name |
  4. +--------------+
  5. | 1-22-你好- |
  6. +--------------+
  7. 1 row in set (0.00 sec)</code>

后面为NULL的时候也可以拼接:

  1. <code>root@localhost [test02]>SELECT concat_ws(‘-‘,1,22,‘你好‘,NULL) display_name;
  2. +--------------+
  3. | display_name |
  4. +--------------+
  5. | 1-22-你好 |
  6. +--------------+
  7. 1 row in set (0.00 sec)</code>

也可以指定NULL为分隔符:

  1. <code>root@localhost [test02]>SELECT concat_ws(‘NULL‘,1,22,‘你好‘,NULL) display_name;
  2. +-------------------+
  3. | display_name |
  4. +-------------------+
  5. | 1NULL22NULL你好 |
  6. +-------------------+
  7. 1 row in set (0.01 sec)
  8. root@localhost [test02]>SELECT concat_ws(‘NULL‘,1,22,‘你好‘,‘‘) display_name;
  9. +-----------------------+
  10. | display_name |
  11. +-----------------------+
  12. | 1NULL22NULL你好NULL |
  13. +-----------------------+
  14. 1 row in set (0.00 sec)</code>

也可以指定空为分隔符:

  1. <code>root@localhost [test02]>SELECT concat_ws(‘‘,1,22,‘你好‘) display_name;
  2. +--------------+
  3. | display_name |
  4. +--------------+
  5. | 122你好 |
  6. +--------------+
  7. 1 row in set (0.00 sec)</code>

指定拼接的标题:

  1. <code>
  2. root@localhost [test02]>select * from student3;
  3. +----+------------+---------+------+
  4. | id | teacher_id | name | sex |
  5. +----+------------+---------+------+
  6. | 1 | 1 | xiaosan | 男 |
  7. | 2 | 2 | xiaosan | 男 |
  8. | 3 | 3 | 小曼 | 女 |
  9. | 4 | 4 | 小话 | 女 |
  10. +----+------------+---------+------+
  11. 4 rows in set (0.00 sec)
  12. root@localhost [test02]>SELECT CONCAT_WS(‘_‘,id,name) AS con_ws FROM student3 LIMIT 1;
  13. +-----------+
  14. | con_ws |
  15. +-----------+
  16. | 1_xiaosan |
  17. +-----------+
  18. 1 row in set (0.00 sec)
  19. root@localhost [test02]>SELECT CONCAT_WS(‘_‘,id,name) FROM student3 LIMIT 1;
  20. +------------------------+
  21. | CONCAT_WS(‘_‘,id,name) |
  22. +------------------------+
  23. | 1_xiaosan |
  24. +------------------------+
  25. 1 row in set (0.00 sec)</code>

2.2简单应用演示:

Mysql 查询数据导出为insert 格式 文件

  1. <code>创建从测试表:
  2. CREATE TABLE `student3` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `teacher_id` int(11) DEFAULT NULL,
  5. `name` varchar(20) NOT NULL,
  6. `sex` varchar(10) DEFAULT ‘male‘,
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `teacher_id` (`teacher_id`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ;</code>
  1. <code>
  2. mysql -uroot -p‘jianweiwutest‘ -P3306 -Ne "use test02;select concat_ws(‘\‘‘,‘insert into student3 (id,teacher_id,name,sex) values (‘, id,‘,‘,teacher_id,‘,‘,name,‘,‘,sex,‘);‘) sql_str from student3;"
  3. Warning: Using a password on the command line interface can be insecure.
  4. +---------------------------------------------------------------------------------+
  5. | insert into student3 (id,teacher_id,name,sex) values (‘1‘,‘1‘,‘xiaosan‘,‘男‘); |
  6. | insert into student3 (id,teacher_id,name,sex) values (‘2‘,‘2‘,‘xiaosan‘,‘男‘); |
  7. +---------------------------------------------------------------------------------+
  8. [root@VM_82_178_centos ~]#
  9. root@localhost [test02]>insert into student3 (id,teacher_id,name,sex) values (‘3‘,‘3‘,‘小曼‘,‘女‘);
  10. Query OK, 1 row affected (0.07 sec)
  11. root@localhost [test02]>insert into student3 (id,teacher_id,name,sex) values (‘4‘,‘4‘,‘小话‘,‘女‘);
  12. Query OK, 1 row affected (0.06 sec)
  13. [root@VM_82_178_centos ~]# mysql -uroot -p‘jianweiwutest‘ -P3306 -Ne "use test02;select concat_ws(‘\‘‘,‘insert into student3 (id,teacher_id,name,sex) values (‘, id,‘,‘,teacher_id,‘,‘,name,‘,‘,sex,‘);‘) sql_str from student3;"
  14. Warning: Using a password on the command line interface can be insecure.
  15. +---------------------------------------------------------------------------------+
  16. | insert into student3 (id,teacher_id,name,sex) values (‘1‘,‘1‘,‘xiaosan‘,‘男‘); |
  17. | insert into student3 (id,teacher_id,name,sex) values (‘2‘,‘2‘,‘xiaosan‘,‘男‘); |
  18. | insert into student3 (id,teacher_id,name,sex) values (‘3‘,‘3‘,‘小曼‘,‘女‘); |
  19. | insert into student3 (id,teacher_id,name,sex) values (‘4‘,‘4‘,‘小话‘,‘女‘); |
  20. +---------------------------------------------------------------------------------+
  21. [root@VM_82_178_centos ~]#
  22. 其中-Ne是执行这个SQL语句的选项,-N代表输出SQL语句执行结果中不带第一行的字段名称,-e表示要执行SQL语句;</code>

三.GROUP_CONCAT()函数

GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。

  1. <code>root@localhost [test02]>SELECT id,name,sex FROM student3 WHERE id IN(‘3‘,‘4‘);
  2. +----+--------+------+
  3. | id | name | sex |
  4. +----+--------+------+
  5. | 3 | 小曼 | 女 |
  6. | 4 | 小话 | 女 |
  7. +----+--------+------+
  8. 2 rows in set (0.00 sec)</code>

使用语法及特点:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
在 MySQL 中,你可以得到表达式结合体的连结值。通过使用 DISTINCT 可以排除重复值。如果希望对结果中的值进行排序,可以使用 ORDER BY 子句。
SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (","),可以通过指定 SEPARATOR "" 完全地移除这个分隔符。
可以通过变量 group_concat_max_len 设置一个最大的长度。在运行时执行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大长度被设置,结果值被剪切到这个最大长度。如果分组的字符过长,可以对系统参数进行设置:SET @@global.group_concat_max_len=40000;

  1. <code>
  2. root@localhost [test02]> SELECT id,GROUP_CONCAT(name) FROM student3 WHERE id IN(‘3‘,‘4‘) GROUP BY id;
  3. +----+--------------------+
  4. | id | GROUP_CONCAT(name) |
  5. +----+--------------------+
  6. | 3 | 小曼 |
  7. | 4 | 小话 |
  8. +----+--------------------+
  9. 2 rows in set (0.00 sec)
  10. root@localhost [test02]> SELECT id,GROUP_CONCAT(name,teacher_id) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
  11. +----+-------------------------------+
  12. | id | GROUP_CONCAT(name,teacher_id) |
  13. +----+-------------------------------+
  14. | 1 | xiaosan1 |
  15. | 4 | 小话4 |
  16. +----+-------------------------------+
  17. 2 rows in set (0.00 sec)
  18. root@localhost [test02]> SELECT id,GROUP_CONCAT(name,sex) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
  19. +----+------------------------+
  20. | id | GROUP_CONCAT(name,sex) |
  21. +----+------------------------+
  22. | 1 | xiaosan男 |
  23. | 4 | 小话女 |
  24. +----+------------------------+
  25. 2 rows in set (0.00 sec)
  26. root@localhost [test02]>SELECT id,GROUP_CONCAT(concat_ws(‘, ‘,id,name) ORDER BY id DESC ) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
  27. +----+---------------------------------------------------------+
  28. | id | GROUP_CONCAT(concat_ws(‘, ‘,id,name) ORDER BY id DESC ) |
  29. +----+---------------------------------------------------------+
  30. | 1 | 1, xiaosan |
  31. | 4 | 4, 小话 |
  32. +----+---------------------------------------------------------+
  33. 2 rows in set (0.00 sec)
  34. root@localhost [test02]>SELECT id,GROUP_CONCAT(concat_ws(‘.‘,id,name) ORDER BY id DESC ) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
  35. +----+--------------------------------------------------------+
  36. | id | GROUP_CONCAT(concat_ws(‘.‘,id,name) ORDER BY id DESC ) |
  37. +----+--------------------------------------------------------+
  38. | 1 | 1.xiaosan |
  39. | 4 | 4.小话 |
  40. +----+--------------------------------------------------------+
  41. 2 rows in set (0.01 sec)
  42. root@localhost [test02]>SELECT id,GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
  43. +----+------------------------------------------------------------+
  44. | id | GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) |
  45. +----+------------------------------------------------------------+
  46. | 1 | 1.xiaosan.男 |
  47. | 4 | 4.小话.女 |
  48. +----+------------------------------------------------------------+
  49. 2 rows in set (0.00 sec)
  50. root@localhost [test02]>SELECT GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) FROM student3 ;
  51. +------------------------------------------------------------+
  52. | GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) |
  53. +------------------------------------------------------------+
  54. | 4.小话.女,3.小曼.女,2.xiaosan.男,1.xiaosan.男 |
  55. +------------------------------------------------------------+
  56. 1 row in set (0.00 sec)</code>

欢迎互相交流学习

MySQL拼接函数使用介绍

标签:group by   not   迁移   mysq   uniq   相交   表达   base   using   

人气教程排行