首頁 資料庫 mysql教程 在SQL查询中使用LIKE来代替IN查询的方法

在SQL查询中使用LIKE来代替IN查询的方法

Jun 07, 2016 pm 06:02 PM
in like sql查詢

在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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

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)的語句,記錄到慢查詢日誌中。

python中的mysql資料庫LIKE運算子怎麼用 python中的mysql資料庫LIKE運算子怎麼用 May 31, 2023 pm 09:46 PM

LIKE操作符用於在WHERE子句中搜尋列中的指定模式。語法:SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpatternpattern這裡就是放指定模板的地方,而這裡就要用到“%”,也叫做通配符%如果是放在條件前面,那就是查以...結尾的資料;例如:%李%如果是放在條件後面,那就是查以...開頭的數據;例如:李%%如果是在條件前後都存在,那就是查包含的數據;例如:%李%小知識點:ERROR1064 (42000):Youhaveane

PHP和PDO: 如何執行複雜的SQL查詢語句 PHP和PDO: 如何執行複雜的SQL查詢語句 Jul 28, 2023 pm 03:43 PM

PHP和PDO:如何執行複雜的SQL查詢語句在處理資料庫操作時,PHP提供了一個強大的擴充函式庫PDO(PHPDataObjects),用於簡化與資料庫的互動。 PDO支援多種資料庫,如MySQL、SQLite等,同時也提供了豐富的功能和方法,方便開發人員進行各種資料庫操作。本文將介紹如何使用PDO執行複雜的SQL查詢語句,並附上對應的程式碼範例。連接資料庫

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