搜索
首页数据库mysql教程在SQL查询中使用LIKE来代替IN查询的方法

在SQL查询中根据已知ID的集合来查询结果我们通常会用到IN,直接在IN后面给出ID的集合或是在IN后面跟一个子查询。

如下:
代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D','F2212304-51D4-42C9-AD35-5586A822258E')

可以看出直接在IN后面跟ID的集合需要将每一个ID都用单引号引起来。在实际应用中会遇到这么一种情况,在界面中收集的是一串GUID的拼接字符串,中间以逗号隔开,如果作为参数传到一个存储过程中执行,最终生成的语句会是下面这样:
代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E')

这样就不能查询到正确的结果。

一般情况下我们解决此问题的思路是将传入的字符串用一个split函数来处理,最终处理的结果是一张表,然后将这个表做自查询即可,如下:
代码如下:
DECLARE @IDs VARCHAR(4000)
SET @IDs='BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
DECLARE @temp TABLE(str VARCHAR(50))
INSERT INTO @temp
SELECT * FROM dbo.Split(@IDs,',')
SELECT * FROM Orders WHERE OrderGUID IN (SELECT str FROM @temp)

当然split函数系统比不提供,需要我们自己写:
代码如下:
CREATE FUNCTION Split
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
RETURNS @temp TABLE(F1 VARCHAR(100))
AS
BEGIN
DECLARE @i INT
SET @SourceSql=rtrim(ltrim(@SourceSql))
SET @i=charindex(@StrSeprate,@SourceSql)
WHILE @i>=1
BEGIN
INSERT @temp VALUES(left(@SourceSql,@i-1))
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
END
IF @SourceSql''
INSERT @temp VALUES(@SourceSql)
RETURN
END

像这样做非常麻烦,而且还需要借助函数来实现,下面介绍一种简单的方法,因为GUID是唯一的,所以在上面的例子中可以使用LIKE来代替IN也可以达到同样的查询效果:
代码如下:
SELECT * FROM Orders
WHERE 'BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
LIKE '%'+convert(VARCHAR(40),OrderGUID)+'%'
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Vue 中使用 i18n 实现多语言切换的技巧Vue 中使用 i18n 实现多语言切换的技巧Jun 25, 2023 am 09:33 AM

随着国际化的不断发展,越来越多的网站和应用程序需要支持多语言切换功能。Vue作为一款流行的前端框架,提供了一种名为i18n的插件,可以帮助我们实现多语言切换。本文将介绍Vue中使用i18n实现多语言切换的常见技巧。第一步:安装i18n插件首先,我们需要使用npm或yarn安装i18n插件。在命令行中输入以下命令:npminst

out和in接口是什么意思out和in接口是什么意思Sep 28, 2021 pm 04:39 PM

out接口指的是输出接口,in接口指的是输入接口。out接口一般代表着音源线路输出接口,用来接负载,例音箱、耳机等;而in接口一般代表着音源线路输入接口,用来接CD机、手机、MP3、电脑等。

MySQL的REGEXP和LIKE有什么区别MySQL的REGEXP和LIKE有什么区别May 30, 2023 pm 01:58 PM

1、在匹配内容上的区别LIKE要求整个数据都要匹配,用Like,必须这个字段的所有内容满足条件;REGEXP只需要部分匹配即可,只需要有任何一个片段满足即可。2、在匹配位置上的区别LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会被返回(除非使用通配符);REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,并且REGEXP能匹配整个列值(与LIKE相同的作用)。3、SQL语句返回数据区别LIKE匹配:该SQL语

美团面试题:慢SQL有遇到过吗?是怎么解决的?美团面试题:慢SQL有遇到过吗?是怎么解决的?Aug 24, 2023 pm 03:41 PM

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中查询时间超过(大于)设置阈值(long_query_time)的语句,记录到慢查询日志中。

PHP和PDO: 如何执行复杂的SQL查询语句PHP和PDO: 如何执行复杂的SQL查询语句Jul 28, 2023 pm 03:43 PM

PHP和PDO:如何执行复杂的SQL查询语句在处理数据库操作时,PHP提供了一种强大的扩展库PDO(PHPDataObjects),用于简化与数据库的交互。PDO支持多种数据库,比如MySQL、SQLite等,同时也提供了丰富的功能和方法,方便开发人员进行各种数据库操作。本文将介绍如何使用PDO执行复杂的SQL查询语句,并附上相应的代码示例。连接数据库

python中的mysql数据库LIKE操作符怎么用python中的mysql数据库LIKE操作符怎么用May 31, 2023 pm 09:46 PM

LIKE操作符用于在WHERE子句中搜索列中的指定模式。语法:SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpatternpattern这里就是放指定模板的地方,而这里就要用到“%”,也叫做通配符%如果是放在条件前面,那就是查以...结尾的数据;例如:%李%如果是放在条件后面,那就是查以...开头的数据;例如:李%%如果是在条件前后都存在,那就是查包含的数据;例如:%李%小知识点:ERROR1064(42000):Youhaveane

Mysql中on,in,as,where的区别是什么Mysql中on,in,as,where的区别是什么Jun 03, 2023 am 11:37 AM

Mysqlon,in,as,where的区别答:Where查询条件,on内外连接时候用,as作为别名,in查询某值是否在某条件里创建2个表:student,scorestudent:score:whereSELECT*FROMstudentWHEREs_sex='男'例如:onSELECT*FROMstudentLEFTJOINscoreonstudent.s_id=score.s_id;on和where组合:SELECT*FROMstudentLEFTJOINs

MySQL中怎么用Union优化Like语句MySQL中怎么用Union优化Like语句May 31, 2023 pm 03:55 PM

用Union优化Like语句1)有时候,你可能需要在查询中使用or操作符进行比较。当or关键字在where子句中使用频率过高的时候,它可能会使MySQL优化器错误的选择全表扫描来检索记录。union子句可以是查询执行的更快,尤其是当其中一个查询有一个优化索引,而另一个查询也有一个优化索引的时候。比如,在first_name和last_name上分别存在索引的情况下,执行如下查询语句:mysql>select*fromstudentswherefirst_namelike'A

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。