Mysql 实现字段拼接的三个函数

给运营导出数据时,难免需要对字段进行拼接,如果 Mysql 可以完成的话,就可以少些很多代码。

  • concat()
  • concat_ws()
  • group_concat()

Mysql 确实有几个函数可以对字段进行拼接。

concat()

将多个字段使用空字符串拼接为一个字段

mysql> select concat(id, type) from mm_content limit 10;
+------------------+
| concat(id, type) |
+------------------+
| 100818image   |
| 100824image   |
| 100825video   |
| 100826video   |
| 100827video   |
| 100828video   |
| 100829video   |
| 100830video   |
| 100831video   |
| 100832video   |
+------------------+
10 rows in set (0.00 sec)

不过如果有字段值为 NULL,则结果为 NULL。

mysql> select concat(id, type, tags) from mm_content limit 10;
+------------------------+
| concat(id, type, tags) |
+------------------------+
| NULL          |
| NULL          |
| NULL          |
| NULL          |
| NULL          |
| NULL          |
| NULL          |
| NULL          |
| NULL          |
| NULL          |
+------------------------+
10 rows in set (0.00 sec)

concat_ws()

上面这种方式如果想要使用分隔符分割,就需要每个字段中间插一个字符串,非常麻烦。

concat_ws() 可以一次性的解决分隔符的问题,并且不会因为某个值为 NUll,而全部为 NUll。

mysql> select concat_ws(' ', id, type, tags) from mm_content limit 10;
+--------------------------------+
| concat_ws(' ', id, type, tags) |
+--------------------------------+
| 100818 image          |
| 100824 image          |
| 100825 video          |
| 100826 video          |
| 100827 video          |
| 100828 video          |
| 100829 video          |
| 100830 video          |
| 100831 video          |
| 100832 video          |
+--------------------------------+
10 rows in set (0.00 sec)

group_concat()

最后一个厉害了,正常情况下一个语句写成这样一定会报错的。

mysql> select id from test_user group by age;
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test_user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

但是 group_concat() 可以将分组状态下的其他字段拼接成字符串查询出来

mysql> select group_concat(name) from test_user group by age;
+--------------------+
| group_concat(name) |
+--------------------+
| wen,ning      |
| wxnacy,win     |
+--------------------+
2 rows in set (0.00 sec)

默认使用逗号分隔,我们也可以指定分隔符

mysql> select group_concat(name separator ' ') from test_user group by age;
+----------------------------------+
| group_concat(name separator ' ') |
+----------------------------------+
| wen ning             |
| wxnacy win            |
+----------------------------------+
2 rows in set (0.00 sec)

将字符串按照某个顺序排列

mysql> select group_concat(name order by id desc separator ' ') from test_user group by age;
+---------------------------------------------------+
| group_concat(name order by id desc separator ' ') |
+---------------------------------------------------+
| ning wen                     |
| win wxnacy                    |
+---------------------------------------------------+
2 rows in set (0.00 sec)

如果想要拼接多个字段,默认是用空字符串进行拼接的,我们可以利用 concat_ws() 方法嵌套一层

mysql> select group_concat(concat_ws(',', id, name) separator ' ') from test_user group by age;
+------------------------------------------------------+
| group_concat(concat_ws(',', id, name) separator ' ') |
+------------------------------------------------------+
| 1,wen 2,ning                     |
| 3,wxnacy 4,win                    |
+------------------------------------------------------+
2 rows in set (0.00 sec)

以上就是Mysql 实现字段拼接的三个函数的详细内容,更多关于MySQL 字符串拼接的资料请关注我们其它相关文章!

(0)

相关推荐

  • MySql逗号拼接字符串查询的两种方法

    下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_PART_IN_SET 例如某字段里是为1,2,3,4,5 使用方法: 第一种,传入1,3,6  可以查出来 select * from XXX where FIND_PART_IN_SET('1,3,6','1,2,3,4,5') 第二种,传入1,3,6  查不出来 select * from XXX where FIND_ALL_PART_IN_SET(

  • MySQL 常用的拼接语句汇总

    前言:在MySQL中 CONCAT ()函数用于将多个字符串连接成一个字符串,利用此函数我们可以将原来一步无法得到的sql拼接出来,在工作中也许会方便很多,下面主要介绍下几个常用的场景. 注:适用于5.7版本 低版本可能稍许不同. 1.拼接查询所有用户 SELECT DISTINCT CONCAT( 'User: \'', USER, '\'@\'', HOST, '\';' ) AS QUERY FROM mysql.USER; # 当拼接字符串中出现'时 需使用\转义符 2.拼接DROP t

  • mysql字符串拼接并设置null值的实例方法

    #字符串拼接 concat(s1,s2); 将表中last_name和first_name中的字符串拼接 select concat(last_name,first_name) as 姓名 from employees; #只会修改last_name不会修改first_name SELECT first_name,last_name AS f FROM employees; #将两个列用逗号隔开并命名为out_put SELECT CONCAT(`last_name`,',',`phone_nu

  • PHP将MySQL的查询结果转换为数组并用where拼接的示例

    mysql查询结果转换为PHP数组的几种方法的区别:  $result = mysql_fetch_row():这个函数返回的是数组,数组是以数字作为下标的,你只能通过$result[0],$Result[2]这样的形式来引用. $result = mysql_fetch_assoc():这个函数返回是以字段名为下标的数组,只能通过字段名来引用.$result['field1']. $result = mysql_fetch_array():这个函数返回的是一个混合的数组,既可以通过数字下标来引

  • mysql函数拼接查询concat函数的使用方法

    如下所示: //查询表managefee_managefee的年year 和 month ,用concat函数拼成year-month.例如将2017和1 拼成2017-01.. select CONCAT(a.year,'-',if(a.month<=9,CONCAT('0',a.month),a.month))as date,a.* from managefee_managefee as a; //查询managefee_managefee中时间段为2017-01到2017-07的数据 se

  • MySQL拼接字符串函数GROUP_CONCAT详解

    上一篇文章 跨表更新,看到自己写的SQL像个憨憨写了关于跨表个更新的内容.一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5 新需求来了,静悄悄的来了!!! 领导想要查看每个 performance 下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要得到下面的结果: 要将结果集中某个指定的列进行字符串拼接,这要怎么做呢?主角闪亮✨登场 GROUP_CONCAT(expr) 在 Mysql

  • 利用java+mysql递归实现拼接树形JSON列表的方法示例

    前言 本文给大家介绍的是关于利用java+mysql递归实现拼接树形JSON列表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 我们在做Java web项目时,前端控件例如国家-省-市-区-县等树形列表,常常需要多级树形json数据 例如: [ { "name": "商品目录", "pid": "-1", "id": "1", "children"

  • MySQL中字符串与Num类型拼接报错的解决方法

    发现问题 图片地址如下 http://qximg.lightplan.cc/2016/09/11/1473574486942944.jpeg 需要实现的效果是要加上尺寸,如以下效果 http://qximg.lightplan.cc/2016/09/11/1473574486942944.jpeg|1200*675 一开始想当然使用 UPDATE tag_group SET cover = cover + '|1200*675' WHERE id = 1; 结果报错 Data truncatio

  • Mysql 实现字段拼接的三个函数

    给运营导出数据时,难免需要对字段进行拼接,如果 Mysql 可以完成的话,就可以少些很多代码. concat() concat_ws() group_concat() Mysql 确实有几个函数可以对字段进行拼接. concat() 将多个字段使用空字符串拼接为一个字段 mysql> select concat(id, type) from mm_content limit 10; +------------------+ | concat(id, type) | +--------------

  • MySQL实现字段或字符串拼接的三种方式总结

    目录 一.CONCAT函数 1.1.拼接非空字段或字符串 1.2.拼接空(NULL)字段 二.CONCAT_WS函数 2.1.拼接非空字段或字符串 2.2.拼接空(NULL)字段 三.GROUP_CONCAT函数 3.1.默认以逗号分隔符连接 3.2.可自定义对字段去重排序和指定分隔符 3.3.group_concat的限制和设置 一.CONCAT函数 concat函数是将多个字段或字符串拼接为一个字符串:但是字符串之间没有任何分隔. concat函数官方介绍 -- CONCAT函数的语法如下:

  • mysql 多个字段拼接的实例详解

    Mysql的查询结果行字段拼接,可以用下面两个函数实现: 1. concat函数 mysql> select concat('1','2','3') from test ; +---------------------+ | concat('1','2','3') | +---------------------+ | 123 | +---------------------+ 如果连接串中存在NULL,则返回结果为NULL: mysql> select concat('1','2',NULL

  • php mysql获取表字段名称和字段信息的三种方法

    php mysql获取表字段名称和字段信息的三种方法 先给出本实例中使用的表的信息: 使用desc获取表字段信息 php代码如下: <?php mysql_connect("localhost","root",""); mysql_select_db("test"); $query = "desc student"; $result = mysql_query($query); while($row=

  • PHP+Mysql实现多关键字与多字段生成SQL语句的函数

    本文实例讲述了PHP+Mysql实现多关键字与多字段生成SQL语句的函数的方法.分享给大家供大家参考.具体实现方法如下: 先看实例: 复制代码 代码如下: $keyword="1 2 3"; echo $sql=search($keyword,"enter_gongyin_pic","a+b+c"); //函数生成,没有LIMIT,没有ORDER BY 生成: 复制代码 代码如下: SELECT * FROM `enter_gongyin_pic

  • 浅谈mysql中concat函数,mysql在字段前/后增加字符串

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串. 一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQ

  • mysql 替换字段部分内容及mysql 替换函数replace()

    [mysql]replace的用法(替换某字段部分内容) [mysql]replace的用法 1.replace into replace into table (id,name) values('1','aa'),('2','bb')           此语句的作用是向表table中插入两条记录.如果主键id为1或2不存在就相当于           insert into table (id,name) values('1','aa'),('2','bb')           如果存在相

  • MySQL中字段类型为longtext的值导出后显示二进制串方式

    目录 MySQL字段类型为longtext的值导出后显示二进制串 使用MySQL的CAST()函数或者CONVERT()函数 MySQL的基本语句及用法 WHERE子句:条件查找 UPDATE子句:数据更新 DELETE子句:删除数据 LINK子句:元字符查找 UNION操作符:联合查询结果 MySQL字段类型为longtext的值导出后显示二进制串 MySQL中字段类型为 longtext 的字段值保存的是Blob (Binary large objects),所以在导出sql或者将sql查询

  • 详解MySQL的字段默认null对唯一索引的影响

    目录 正文 看一下为何唯一索引为影响insert速度 MySQL版本:在docker中启动一个mysql 假设只存在邮箱注册: insert数据 经验 正文 在日常业务开发中,会经常遇到需要保证唯一性的数据业务,如用户注册业务.一般注册业务中允许用户以手机号或email注册账号,且需要保证唯一,不允许重复注册.当用户输入手机号或email登录时,程序会判定输入信息的存在与否性,存在则走登录,不存在则走注册.而保证唯一性就不仅仅需要在程序端做判断,还需要MySQL的唯一索引去做最后一道防线.那么唯

  • MySQL时间字段究竟使用INT还是DateTime的说明

    今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` int(10) unsigned NOT NULL DEFAULT '0'; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用在字段上转换运算,直接用于时间比较!二来如下所述效率也更高. 归根结底:用int来代替data类型,更高效. 环境: Windows XP PHP Version 5.2.9 MySQL Server 5.1 第一步.创建一个表date_test(非

随机推荐