mysql单字段多值分割和合并的处理方法

多个值合并展示

现在我们有如图一到图二的需求

怎么做?

如下sql:

SELECT id,GROUP_CONCAT(DISTINCT str) as str from test GROUP BY id

相关知识点

GROUP_CONCAT

GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符'])

多个值拆分展示

现在我们的需求和第一个例子相反

由图三

到图四

这里就稍微复杂了,首先对于str提前做了如图的处理,即字符+','的一对一对应处理,其次,因为mysql没有序列功能,所以我们需要提前准备一张序列表,最大id应该大于单个字段内最大项数

具体sql如下:

SELECT t.id,SUBSTRING_INDEX(SUBSTRING_INDEX(str,',',s.id),',',-1) as str
	from test2 t
		join sequence s on s.id<(LENGTH(t.str)/2+1)
			ORDER BY t.id

相关知识点

SUBSTRING_INDEX(str,delim,count)

SUBSTRING_INDEX(要处理的字符串,分隔符,计数)

如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容

如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容

总结

到此这篇关于mysql单字段多值分割和合并处理的文章就介绍到这了,更多相关mysql单字段多值分割和合并内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mysql合并结果接横向拼接字段的实现步骤

    前言 近日在做一个报表功能里面有一个这样的需求是统计各部门在某一月入职和离职的人数 我的步骤 先查出入职的人数 SELECT dept ,COUNT(1) rcNumber FROM 员工表 WHERE ( 入职时间 != '' OR 入职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09' GROUP BY 部门ID ORDER BY 部门名称 查询记录 在查询出离职的人数sql: SELECT dept ,COUNT(1) rcN

  • mysql 列转行,合并字段的方法(必看)

    数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score else 0 end) ---判断 as 语文---别名作为列名 SELECT `name`, MAX( CASE WHEN course='语文' THEN score END ) AS 语文, MAX( CASE WHEN course='数学' THEN score END ) AS 数学, MAX( CASE WHEN cour

  • mysql合并多条记录的单个字段去一条记录编辑

    测试用表结构: 复制代码 代码如下: -- -- 表的结构 `tet` -- CREATE TABLE IF NOT EXISTS `tet` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `url` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- 转存表中的数据 `tet` -- INSERT INTO `tet` (`id`, `name`, `

  • mysql中合并两个字段的方法分享

    例如:select (a+b) as c from 表 类型也一致都是varchar型的,可就是显示不正确. 直到concat() MySQL中concat函数 下面通过一个例子介绍MySQL中的concat函数的使用方法,比如select concat('11','22','33'). MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则

  • MySQL里实现类似SPLIT的分割字符串的函数

    下边的函数,实现了象数组一样去处理字符串. 一,用临时表作为数组 复制代码 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) se

  • mysql单字段多值分割和合并的处理方法

    多个值合并展示 现在我们有如图一到图二的需求 怎么做? 如下sql: SELECT id,GROUP_CONCAT(DISTINCT str) as str from test GROUP BY id 相关知识点 GROUP_CONCAT GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 多个值拆分展示 现在我们的需求和第一个例子相反 由图三 到图四 这里就稍微复杂了,首先对于str提前做了如图的

  • django-xadmin根据当前登录用户动态设置表单字段默认值方式

    相信你一定会设置一个普通字段的默认值: class Offer(models.Model): salary = models.CharField(max_length=64, blank=True, default='6000', verbose_name='薪资待遇') 相信你还能动态设置外键字段的默认值: class Interview(models.Model): department = models.ForeignKey('departments.Department', relate

  • MySQL表字段设置默认值(图文教程及注意细节)

    环境 MySQL 5.1 + 命令行工具 问题 MySQL表字段设置默认值 解决 复制代码 代码如下: --SQL: CREATE TABLE test( i_a int NOT NULL DEFAULT 1, ts_b timestamp NOT NULL DEFAULT NOW(), c_c char(2) NOT NULL DEFAULT '1' ); --以下SQL不合法 --time_d time NOT NULL DEFAULT CURTIME(), --date_e date NO

  • 解决JPA save()方法null值覆盖掉mysql预设的默认值问题

    目录 JPA save()方法null值覆盖掉mysql预设的默认值 覆盖原因 解决办法 data jpa动态插入(null为sql默认值,utime自动更新 ) JPA save()方法null值覆盖掉mysql预设的默认值 覆盖原因 save()方法在没有参数传进去的时候默认是null值,而mysql表中该字段设置为可以为null值,这时虽然我们设置了默认值,可null值还是会把默认值覆盖掉. 解决办法 将该字段设置为不允许null值即可,这样null值就会被替换为默认值. data jpa

  • Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并

    1. 简介 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.最主要的数据结构是ndarray数组. NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab. SciPy 是一个开源的 Python 算法库和数学工具包.SciPy 包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换

  • MySQL表字段时间设置默认值

    应用场景 在数据表中,要记录的每条数据是什么时候创建的,不需要应用程序去特意记录,而是由数据库获取当前时间自动记录创建时间. 在数据库中,要记录每条数据是什么时候修改的,不需要应用程序去特意记录,而由数据库获取当前时间自动记录修改时间. 在数据库中获取当前时间 oracle:select sysdate from dual; sqlserver:select getdate(); mysql:select sysdate();  select now(); MySQL中时间函数NOW()和SYS

  • JS获取一个表单字段中多条数据并转化为json格式

    如图需要获取下面两个li标签里面的数据,然后传给后台:而后台接收的数据格式是json的,所以需要把两个li里面的信息转化为以下格式的. {recieverName:小红,recieverPhone:12341234,recieverAddress:中国湖南},{recieverName:小明,recieverPhone:12345678,recieverAddress:中国上海} 代码如下: var recieverArr = []; //全局变量 var recieverMsg = {}; /

  • vue 使用rules对表单字段进行校验的步骤

    在实际开发过程中,发现以下的写法比较累赘,因为在后面的项目中,继续优化表单验证的方法,让代码更简洁.主要的修改是验证方法的修改和调用 以前验证表单字段的最大长度,description: [{ max: 200, message: '最大长度为200个字符', trigger: 'blur' }] 现在写法:description: [validateLen(200)] 其中,validateLen是我封装的一个方法. 使用步骤: 1.在uitls文件夹中新建一个validate.js文件. 2

  • vue使用rules实现表单字段验证

    vue 中表单字段验证的写法和方式有多种,本博客介绍三种较为常用的验证方式. 1. 写在 data 中验证 表单内容 <!-- 表单 --> <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px"> <el-form-item label="用户名称:" prop=&q

随机推荐