MySQL拼接函数使用介绍

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。可以有一个或多个参数。
官方给出的例子:

Examples:
mysql> SELECT CONCAT(‘My‘, ‘S‘, ‘QL‘);
        -> ‘MySQL‘
mysql> SELECT CONCAT(‘My‘, NULL, ‘QL‘);
        -> NULL
mysql> SELECT CONCAT(14.3);
        -> ‘14.3‘
[email protected] [test02]>SELECT concat(‘-‘,1,22,‘你好‘) display_name;
+--------------+
| display_name |
+--------------+
| -122你好     |
+--------------+
1 row in set (0.00 sec)

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

[email protected] [test02]>SELECT concat(‘-‘,1,22,‘你好‘,NULL) display_name;
+--------------+
| display_name |
+--------------+
| NULL         |
+--------------+
1 row in set (0.00 sec)
[email protected] [test02]>SELECT concat(‘-‘,1,‘你好‘,NULL,22) display_name;
+--------------+
| display_name |
+--------------+
| NULL         |
+--------------+
1 row in set (0.00 sec)

1.2 concat函数简单使用介绍:

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

[email protected] [information_schema]>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)

[[email protected]_82_178_centos tmp]# cat /tmp/1.sql
rename table test01.student3 to test02.student3;
rename table test01.test1_event to test02.test1_event;
[email protected] [information_schema]>source /tmp/1.sql
Query OK, 0 rows affected (0.10 sec)
Query OK, 0 rows affected (0.05 sec)

[email protected] [test02]>show tables;
+------------------+
| Tables_in_test02 |
+------------------+
| student3         |
| test1_event      |
+------------------+
2 rows in set (0.01 sec)

[email protected] [test02]>use test01;
Database changed
[email protected] [test01]>show tables;
Empty set (0.00 sec)

二.CONCAT_WS()函数介绍:

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

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

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

[email protected] [test02]>SELECT concat_ws(‘-‘,1,22,‘你好‘) display_name;
+--------------+
| display_name |
+--------------+
| 1-22-你好    |
+--------------+
1 row in set (0.00 sec)

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

[email protected] [test02]>SELECT concat_ws(‘-‘,1,22,‘你好‘,‘‘) display_name;
+--------------+
| display_name |
+--------------+
| 1-22-你好-   |
+--------------+
1 row in set (0.00 sec)

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

[email protected] [test02]>SELECT concat_ws(‘-‘,1,22,‘你好‘,NULL) display_name;
+--------------+
| display_name |
+--------------+
| 1-22-你好    |
+--------------+
1 row in set (0.00 sec)

也可以指定NULL为分隔符:

[email protected] [test02]>SELECT concat_ws(‘NULL‘,1,22,‘你好‘,NULL) display_name;
+-------------------+
| display_name      |
+-------------------+
| 1NULL22NULL你好   |
+-------------------+
1 row in set (0.01 sec)

[email protected] [test02]>SELECT concat_ws(‘NULL‘,1,22,‘你好‘,‘‘) display_name;
+-----------------------+
| display_name          |
+-----------------------+
| 1NULL22NULL你好NULL   |
+-----------------------+
1 row in set (0.00 sec)

也可以指定空为分隔符:

[email protected] [test02]>SELECT concat_ws(‘‘,1,22,‘你好‘) display_name;
+--------------+
| display_name |
+--------------+
| 122你好      |
+--------------+
1 row in set (0.00 sec)

指定拼接的标题:


[email protected] [test02]>select * from student3;
+----+------------+---------+------+
| id | teacher_id | name    | sex  |
+----+------------+---------+------+
|  1 |          1 | xiaosan | 男   |
|  2 |          2 | xiaosan | 男   |
|  3 |          3 | 小曼    | 女   |
|  4 |          4 | 小话    | 女   |
+----+------------+---------+------+
4 rows in set (0.00 sec)

[email protected] [test02]>SELECT CONCAT_WS(‘_‘,id,name) AS con_ws FROM student3 LIMIT 1;
+-----------+
| con_ws    |
+-----------+
| 1_xiaosan |
+-----------+
1 row in set (0.00 sec)

[email protected] [test02]>SELECT CONCAT_WS(‘_‘,id,name)  FROM student3 LIMIT 1;
+------------------------+
| CONCAT_WS(‘_‘,id,name) |
+------------------------+
| 1_xiaosan              |
+------------------------+
1 row in set (0.00 sec)

2.2简单应用演示:

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

创建从测试表:
CREATE TABLE `student3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `name` varchar(20) NOT NULL,
  `sex` varchar(10) DEFAULT ‘male‘,
  PRIMARY KEY (`id`),
  UNIQUE KEY `teacher_id` (`teacher_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ;

 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;"
Warning: Using a password on the command line interface can be insecure.
+---------------------------------------------------------------------------------+
| insert into student3 (id,teacher_id,name,sex) values (‘1‘,‘1‘,‘xiaosan‘,‘男‘);  |
| insert into student3 (id,teacher_id,name,sex) values (‘2‘,‘2‘,‘xiaosan‘,‘男‘);  |
+---------------------------------------------------------------------------------+
[[email protected]_82_178_centos ~]# 

[email protected] [test02]>insert into student3 (id,teacher_id,name,sex) values (‘3‘,‘3‘,‘小曼‘,‘女‘);
Query OK, 1 row affected (0.07 sec)

[email protected] [test02]>insert into student3 (id,teacher_id,name,sex) values (‘4‘,‘4‘,‘小话‘,‘女‘);
Query OK, 1 row affected (0.06 sec)

[[email protected]_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;"
Warning: Using a password on the command line interface can be insecure.
+---------------------------------------------------------------------------------+
| insert into student3 (id,teacher_id,name,sex) values (‘1‘,‘1‘,‘xiaosan‘,‘男‘);  |
| insert into student3 (id,teacher_id,name,sex) values (‘2‘,‘2‘,‘xiaosan‘,‘男‘);  |
| insert into student3 (id,teacher_id,name,sex) values (‘3‘,‘3‘,‘小曼‘,‘女‘);     |
| insert into student3 (id,teacher_id,name,sex) values (‘4‘,‘4‘,‘小话‘,‘女‘);     |
+---------------------------------------------------------------------------------+
[[email protected]_82_178_centos ~]# 

其中-Ne是执行这个SQL语句的选项,-N代表输出SQL语句执行结果中不带第一行的字段名称,-e表示要执行SQL语句;

三.GROUP_CONCAT()函数

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

[email protected] [test02]>SELECT id,name,sex FROM student3 WHERE id IN(‘3‘,‘4‘);
+----+--------+------+
| id | name   | sex  |
+----+--------+------+
|  3 | 小曼   | 女   |
|  4 | 小话   | 女   |
+----+--------+------+
2 rows in set (0.00 sec)

使用语法及特点:
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;


[email protected] [test02]> SELECT id,GROUP_CONCAT(name) FROM student3 WHERE id IN(‘3‘,‘4‘) GROUP BY id;
+----+--------------------+
| id | GROUP_CONCAT(name) |
+----+--------------------+
|  3 | 小曼               |
|  4 | 小话               |
+----+--------------------+
2 rows in set (0.00 sec)
[email protected] [test02]> SELECT id,GROUP_CONCAT(name,teacher_id) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
+----+-------------------------------+
| id | GROUP_CONCAT(name,teacher_id) |
+----+-------------------------------+
|  1 | xiaosan1                      |
|  4 | 小话4                         |
+----+-------------------------------+
2 rows in set (0.00 sec)

[email protected] [test02]> SELECT id,GROUP_CONCAT(name,sex) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
+----+------------------------+
| id | GROUP_CONCAT(name,sex) |
+----+------------------------+
|  1 | xiaosan男              |
|  4 | 小话女                 |
+----+------------------------+
2 rows in set (0.00 sec)

[email protected] [test02]>SELECT id,GROUP_CONCAT(concat_ws(‘, ‘,id,name) ORDER BY id DESC ) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
+----+---------------------------------------------------------+
| id | GROUP_CONCAT(concat_ws(‘, ‘,id,name) ORDER BY id DESC ) |
+----+---------------------------------------------------------+
|  1 | 1, xiaosan                                              |
|  4 | 4, 小话                                                 |
+----+---------------------------------------------------------+
2 rows in set (0.00 sec)

[email protected] [test02]>SELECT id,GROUP_CONCAT(concat_ws(‘.‘,id,name) ORDER BY id DESC ) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
+----+--------------------------------------------------------+
| id | GROUP_CONCAT(concat_ws(‘.‘,id,name) ORDER BY id DESC ) |
+----+--------------------------------------------------------+
|  1 | 1.xiaosan                                              |
|  4 | 4.小话                                                 |
+----+--------------------------------------------------------+
2 rows in set (0.01 sec)

[email protected] [test02]>SELECT id,GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) FROM student3 WHERE id IN(‘1‘,‘4‘) GROUP BY id;
+----+------------------------------------------------------------+
| id | GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) |
+----+------------------------------------------------------------+
|  1 | 1.xiaosan.男                                               |
|  4 | 4.小话.女                                                  |
+----+------------------------------------------------------------+
2 rows in set (0.00 sec)

[email protected] [test02]>SELECT GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) FROM student3 ;
+------------------------------------------------------------+
| GROUP_CONCAT(concat_ws(‘.‘,id,name,sex) ORDER BY id DESC ) |
+------------------------------------------------------------+
| 4.小话.女,3.小曼.女,2.xiaosan.男,1.xiaosan.男              |
+------------------------------------------------------------+
1 row in set (0.00 sec)

欢迎互相交流学习

原文地址:http://blog.51cto.com/wujianwei/2320073

时间: 2024-11-05 06:25:58

MySQL拼接函数使用介绍的相关文章

MySQL Date函数的正确用法

以下的文章主要介绍的是MySQL Date函数的实际应用其中包括如何获取当前时间的具体操作,Unix时间的具体应用,时间前后.时间间隔与时间转换的实际内容描述,以下就是文章的主要内容. MySQL Date函数 1.获取当前时间 MySQL> select current_timestamp(); +---------------------+ | current_timestamp() | +---------------------+ | 2010-01-18 21:24:37 | +---

MySQL下创建序列及创建自定义函数方法介绍

工作过程中需要将基于DB2数据库的应用以及数据迁移到MySQL中去,在原应用中,大量使用了SEQUENCE,考虑尽量减少代码的修改,决定在迁移后的应用中继续保留SEQUENCE的使用,这就要求在MySQL中寻找替代SEQUENCE的解决方案. 在DB2中创建一个SEQUENCE的方法如下: DROP SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO; CREATE SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO AS BIGINT INCRE

MySQL字符串函数、日期时间函数

MySQL字符串函数.日期时间函数 一.常见字符串函数: 1.CHAR_LENGTH  获取长度(字符为单位) 2.FORMAT  格式化 3.INSERT  替换的方式插入 4.INSTR  获取位置 5.LEFT/RIGHT  取左.取右 6.LENGTH   获取长度(字节为单位) 7.LTRIM/RTRIM/TRIM 去空格(左/右/自定义) 8.STRCMP  字符串比较 9.CONCAT  字符串拼接 10.SUBSTRING  字符串截取 1.CHAR_LENGTH:获取长度(字符

php 函数集介绍

php源代码之函数集介绍 array_change_key_case — 返回字符串键名全为小写或大写的数组 array_chunk — 将一个数组分割成多个 array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 array_count_values — 统计数组中所有的值出现的次数 array_diff_assoc — 带索引检查计算数组的差集 array_diff_key — 使用键名比较计算数组的差集 array_diff_uassoc — 用用户

[转载]MySQL UUID() 函数

目录 目录 一 引子 二 MySQL UUID() 函数 三 复制中的 UUID()四 UUID_SHORT() 函数 3.1 实验环境介绍 3.2 搭建复制环境 3.3 基于 STATEMENT 模式 3.4 基于 MIXED 模式 3.5 基于 ROW 模式 五 小结 六 Ref 文/温国兵 一 引子 在 MySQL 中,可以有如下几种途径实现唯一值: 自增序列 UUID() 函数 程序自定义 UUID 基于 16 进制,由 32 位小写的 16 进制数字组成,如下: aaaaaaaa-bb

MySQL 中的数据类型介绍

MySQL 中的数据类型介绍 标签: mysql数据类型mysql全部数据类型mysql字段类型mysql数据存储mysql 2016-04-29 20:24 53643人阅读 评论(11) 收藏 举报  分类: 服务器及软件---MySQL数据库(4)  版权声明:http://blog.csdn.net/anxpp 目录(?)[+] 据我统计,MySQL支持39种(按可使用的类型字段统计,即同义词也作多个)数据类型.下面的介绍可能在非常古老的MySQL版本中不适用. 转载请注明出处:http

MySQL replace函数替换字符串语句的用法(mysql字符串替换)

MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪. 最近在研究CMS,在数据转换的时候需要用到mysql的MySQL replace函数,这里简单介绍一下. 比如你要将表 tb1里面的 f1字段的abc替换为def UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 str 中所有出现

MYSQL BENCHMARK函数的使用

MYSQL BENCHMARK函数是最重要的函数之一,下文对该函数的使用进行了详尽的分析,如果您对此感兴趣的话,不妨一看. 下文为您介绍的是MYSQL BENCHMARK函数的语法,及一些MYSQL BENCHMARK函数相关问题的测试,供您参考学习. BENCHMARK(count,expr) BENCHMARK()函数重复countTimes次执行表达式expr,它可以用于计时MySQL处理表达式有多快.结果值总是0.意欲用于mysql客户,它报告查询的执行时间. mysql> select

Mysql 事件记录 | performance_schema全方位介绍

Mysql 事件记录 | performance_schema全方位介绍 | 导语 在上一篇 初相识|performance_schema全方位介绍 中,我们详细介绍了performance_schema的配置表,坚持读完的是真爱,也恭喜大家翻过了一座火焰山.相信有不少人读完之后,已经迫不及待的想要跃跃欲试了,今天将带领大家一起踏上系列第三篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中事件原始记录表.下面,请跟随我们一起开始performanc