Mysql将字符串按照指定字符分割的正确方法


Posted in MySQL onMay 30, 2022

前言

在某些场景下(比如:用户上传文件或者图片等),一般的做法是将文件信息(文件名,文件路径,文件大小等)保存到文件表(user_file)中,然后再将用户所有上传的文件的id用一个指定字符拼接然后存在表(user)中某个字段里(假设是:file_ids)。
在展示用户上传的文件时就直接查询文件表中就好了:

-- 一般的语句是这样的,假设用户唯一键是id
select * from file where id in(select file_ids from user where id = 1);

sql语句没有问题,文件也能查询出来,但是,上传的文件大于1个后,再用这个sql语句查询就只返回1条记录了,可能就会疑惑了,为什么只返回一条记录???;

肯定有人做过这样的验证

-- 先运行下面这个sql,正确返回1,2,3 假设上传的文件id是1,2,3;
select file_ids from user where id = 1
-- 然后返回的文件id写死在sql语句中,运行成功返回3条记录
select file_ids from user where id in ('1' , '2' , '3');
-- 最后再整体试了下,结果返回一条......
select * from file where id in(select file_ids from user where id = 1)

-- 然后可能会想到:我把in里面的拼接成'1','2','3',这样总可以了吧?
select * from file where id in (select concat('\'', replace(file_ids,',','\',\'') ,'\'') from user where id = 1);
-- concat('\'', replace(file_ids,',','\',\'') ,'\'') 确实能拼接成上面说的形式,但是结果还是只有一条

是因为这个查询只返回一个字段,所以只会返回一条记录(即使有多个逗号拼接,或者是手动拼接的,Mysql只认为是一个值,具体底层不清楚…),正确做法如下:

一:分两次查询(不是本文重点,但可以实现)

select file_ids from user where id = 1

select file_ids from user where id in ('1' , '2' , '3');
或者
select file_ids from user where find_in_set(id , '1,2,3');

二:将file_ids字段分割成多列,类似Mysql的行转列

与Mysql行转列区别:行转列要知道列的内容,而这个不用,只需知道拼接的字符就行了

-- 下面语句将会把1,2,3,4一个字段转换成四行,依次是1,2,3,4
SELECT
	a.id,
	a.file_ids,
	substring_index(
		substring_index(
			a.file_ids,
			',',
			b.help_topic_id + 1
		),
		',' ,- 1
	) file_id
FROM
	user a
JOIN mysql.help_topic b ON b.help_topic_id < (
	length(a.file_ids) - length(REPLACE(a.file_ids, ',', '')) + 1
)
where id = 1
;
-- 然后将上面语句写在in()里面就行了,写在in()里面的话记住只能查询一个字段哦!

上面语句可以直接复制过去,只需将a表及a表字段换成自己的表明及字段就行了,至于mysql.help_topic,是Mysql自带的,不用管的。

附:mysql如何将字符串按分隔符拆分

1.字符串拆分: SUBSTRING_INDEX(pressure 136/70 血压),例如:

SUBSTRING_INDEX(pressure ,',',1)     #截取第一个逗号(,)号以前的字符串
SUBSTRING_INDEX(pressure ,',',-1)    #截取倒数第一个逗号(,)号以后的字符串

2.替换函数:replace( str, from_str, to_str)。例如:

UPDATE bgs_building_copy1 SET `name`=replace(`name`,'=',"");    #替换等号为空字符串

总结

到此这篇关于Mysql将字符串按照指定字符分割的文章就介绍到这了!

MySQL 相关文章推荐
详解Mysql 函数调用优化
Apr 07 MySQL
MySQL 使用SQL语句修改表名的实现
Apr 07 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 MySQL
MySQL数据库安装方法与图形化管理工具介绍
MySQL数据库简介与基本操作
May 30 #MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 #MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 #MySQL
MYSQL如何查看操作日志详解
sql查询语句之平均分、最高最低分及排序语句
May 30 #MySQL
mysql5.5中文乱码问题解决的有用方法
You might like
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python文件写入实例分析
2015/04/08 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
python字典快速保存于读取的方法
2018/03/23 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
python3下载抖音视频的完整代码
2019/06/05 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
python config文件的读写操作示例
2019/09/27 Python
python反转列表的三种方式解析
2019/11/08 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
公关关系专员的自我评价分享
2013/11/20 职场文书
自我评价优秀范文分享
2013/11/30 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
个人自我剖析材料
2014/02/07 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
美术课外活动总结
2014/07/08 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
小学教师工作总结2015
2015/04/07 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
浅析MongoDB之安全认证
2021/06/26 MongoDB