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

目录
  • 使用mysql遇到一种情况:
  • 1 建表
  • 2 查询
  • 总结:

使用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));

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

2 查询

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

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

结果正确。但是如果我要查询id在字符串’3,4,5,12’里的城市,会发现结果出现偏差,查出了6个城市

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

原来是由于武汉的id为12,而北京id为1,上海的id为2,根据instr的语义, id=1或2或12都能查出来,所以修改一下查法

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

总结:

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

到此这篇关于mysql使用instr达到in(字符串)的效果的文章就介绍到这了,更多相关mysql使用instr替代in内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL高效模糊搜索之内置函数locate instr position find_in_set使用详解

    常用的一共有4个方法,如下: 1.使用locate()方法 普通用法: SELECT`column`from`table`wherelocate('keyword',`condition`)>0 类似于java的indexOf(); 不过locate()只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0: 指定起始位置: SELECT LOCATE('bar','foobarbar',5);(从foobarbar的第五个位置开始查找) 2.使用instr()函数(据

  • mysql中使用instr进行模糊查询方法介绍

    在mysql中使用内部函数instr,可代替传统的like方式查询,并且速度更快. instr 函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 例如,查询字段name中带"军"的名字,传统的方法是: select name from 用户表 where name like `%军%'; 用instr的方法: select name from 用户表 where instr('name','军'); 或: select name from 用

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

    目录 使用mysql遇到一种情况: 1 建表 2 查询 总结: 使用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)); insert into t_city v

  • 浅谈MySql整型索引和字符串索引失效或隐式转换问题

    目录 问题概述 问题重现 问题引申 结论 问题概述 今天在上班时,DBA突然找出来一段sql,表示该sql存在隐式转换,不走索引.经过我们的查看后,发现是类型varchar的字段, 我们使用条件传入了数值型的值,由于担心违反保密协议,在此就不贴图了,由我重现一下类似情况给大家看一下. 问题重现 首先我们先创建一张用户表test_user,其中USER_ID为了效果我们设置为varchar类型且加上唯一索引. CREATE TABLE test_user ( ID int(11) NOT NULL

  • MySQL如何用分隔符分隔字符串

    目录 MySQL用分隔符分隔字符串 使用 效果 MySQL存储过程 根据分隔符拆分字符串 MySQL用分隔符分隔字符串 使用 可以使用如下函数 SUBSTRING_INDEX( i.final_car_type, ' ', 1 ) i.final_car_type 即 需要分隔的字符串 ’ ’ 即 用空格分隔该字符串 1 即:取出该空格之前的所有字符 也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容.相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内

  • 批量替换 MySQL 指定字段中的字符串

    批量替换的具体语法是: 复制代码 代码如下: UPDATE 表名 SET 指定字段 = replace(指定字段, '要替换的字符串', '想要的字符串') WHERE 条件; 如果你想把 article 表中 ID 小于5000的记录,content 字段中"解决"替换成"解放",那么语法就是: 复制代码 代码如下: UPDATE article SET content = replace(content, '解决', '解放') WHERE ID<5000

  • MySQL产生随机数并连接字符串的方法示例

    本文实例讲述了MySQL产生随机数并连接字符串的方法.分享给大家供大家参考,具体如下: 用到的方法: concat('a','b','c'); 连接字符串 rand(); 产生随机数 floor(); 取整数 SQL语句示例: 复制代码 代码如下: UPDATE user set reg_ip= concat(floor(RAND() * 250),'.',floor(RAND() * 250),'.',floor(RAND() * 250),'.',floor(RAND() * 250)) w

  • MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法

    上一篇介绍了如何在 Oracle 生成随机数字.字符串.日期.验证码以及 UUID,今天我们继续讨论在 MySQL 中生成各种随机数据的方法.

  • MySQL解决Navicat设置默认字符串时的报错问题

    目录 简介 问题复现 原因分析 解决方案 简介 说明 本文介绍用Navicat添加字段(字符串类型)并设置默认值时的报错问题. 问题描述 在Java开发过程中,经常会遇到给已有的表添加字段的场景. 在插入新字段的时候,表里边可能已经有很多数据了,这时我们最好给新插入的字段设置一个默认值,这样MySQL就会将已经存在的数据的新加字段设置为默认值.设置默认值可以增加系统的可维护性. 但我在给已有的表插入新字段(字符串类型)的时候发现报错了,本文介绍如何解决这个问题. 报错信息 1064 - You

  • mysql中in条件使用字符串方式

    目录 mysql中in条件使用字符串 场景 方法 mysql查询 in条件参数为带逗号的字符串,查询结果错误 解决方案 mysql中in条件使用字符串 场景 当sql使用in作为条件时,使用一个参数满足查询条件,直接传入字符串无法满足条件. select id,name from user where id in(?) 方法 使用FIND_IN_SET(str,strlist)函数 select id,name from user where FIND_IN_SET(id,#{strlist})

  • asp 用InStr查找特定字符串的代码

    今天才发现这个函数的作用,原来可以查找特定的字符或者字符串. 下面是我写的简单例子: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.CodePage=65001%>  <% Response.Charset="UTF-8" %>  <% dim content_text,searchword_text 'content是内容,searchwor

  • mysql替换表中的字符串的sql语句

    核心语句: UPDATE `cdb_pms` SET `subject` = REPLACE(`subject`, 'Welcome to', '欢迎光临') mysql替换字段里数据内容部分字符串 mysql替换表的字段里面内容,如例子: mysql> select host,user from user  where user='testuser'; +-----------------------+----------+ | host                  | user    

随机推荐