mysql使用instr达到in(字符串)的效果


Posted in MySQL onApril 03, 2022

使用mysql遇到一种情况:
需要查出id在某一个id拼接的字符串中的记录,这个时候用id in(id1,id2,...)行不通,因为in语法里面的参数是数字型的,应该用instr语法,instr(idsStr,id)其中idsStr=‘id1,id2,id3…’
下面举例说明:

1 建表

create table t_city (id int(10) ,name varchar(20));

mysql使用instr达到in(字符串)的效果

insert into t_city values (1,'北京'),(2,'上海'),(3,'广州'),(4,'深圳'),(5,'杭州'),(12,'武汉');

mysql使用instr达到in(字符串)的效果

2 查询

现在我需要查询id在字符串’1,2,3’里的城市,但是用in语法是不行的,因为in语法的参数不是字符串,可以用下面的方式来达到相同效果

select * from t_city where instr('1,2,3',id);

mysql使用instr达到in(字符串)的效果
结果正确。但是如果我要查询id在字符串’3,4,5,12’里的城市,会发现结果出现偏差,查出了6个城市

select * from t_city where instr('3,4,5,12',id);

mysql使用instr达到in(字符串)的效果
原来是由于武汉的id为12,而北京id为1,上海的id为2,根据instr的语义, id=1或2或12都能查出来,所以修改一下查法

select * from t_city where instr(',3,4,5,12,',concat(',',id,','));

mysql使用instr达到in(字符串)的效果

总结:
此用法是对instr函数一个偏门的使用,在某些特定的场合下,可以用来达到in函数的效果,但是存在一定的局限性,比如要通过特殊字符使每个值构成唯一避免出现偏差,使用的时候要注意。

MySQL 相关文章推荐
MySQL命令行操作时的编码问题详解
Apr 14 MySQL
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
mysql数据库入门第一步之创建表
May 14 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
Mysql将字符串按照指定字符分割的正确方法
May 30 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 #MySQL
一文了解MYSQL三大范式和表约束
MYSQL优化之数据表碎片整理详解
Innodb存储引擎中的后台线程详解
Apr 03 #MySQL
MySQL磁盘碎片整理实例演示
Mysql使用全文索引(FullText index)的实例代码
Apr 03 #MySQL
一文简单了解MySQL前缀索引
You might like
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
python关键字and和or用法实例
2015/05/28 Python
分享vim python缩进等一些配置
2018/07/02 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
如何转换一个字符串到enum值
2014/04/12 面试题
Linux文件系统类型
2012/09/16 面试题
写好求职信第一句话的技巧
2013/10/26 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
与死神共舞观后感
2015/06/15 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python