SQL查詢(xún)字段被包含語(yǔ)句
前言
說(shuō)到SQL的模糊查詢(xún),最先想到的,應(yīng)該就是like關(guān)鍵字。
當(dāng)我們需要查詢(xún)包含某個(gè)特定字段的數(shù)據(jù)時(shí),往往會(huì)使用 ‘%關(guān)鍵字%' 查詢(xún)的方式。例如:
SELECT ... FROM 表名 WHERE 字段名 LIKE '%關(guān)鍵字%'
這應(yīng)該可以算是一種典型的”包含XXX”的方式,但如果我們需要查詢(xún)字段被包含于特定字符的數(shù)據(jù)時(shí)呢?
比如,我有一張聯(lián)系人數(shù)據(jù)表ConnectName,其中有個(gè)字段用于記錄姓名name。我想獲取名為小蘭和灰原的人的聯(lián)系資料。正常情況下,我們首先能想到的做法應(yīng)該是:
SELECT * FROM ConnectName WHERE name = '小蘭' OR name = '灰原'
這樣的做法是可以實(shí)現(xiàn)這種目的的。如果這時(shí)候,我突然想,再查一個(gè)人,比如說(shuō)“柯南”,那么我們就要修改SQL的結(jié)構(gòu),添加一個(gè)Where條件句:
SELECT * FROM ConnectName WHERE name = '小蘭' OR name = '灰原' OR name = '柯南'
我們知道,OR條件查詢(xún)本身是屬于效率較低的,而且結(jié)構(gòu)變動(dòng)的語(yǔ)句在MyBatis實(shí)現(xiàn)稍微麻煩些(當(dāng)然也是可以實(shí)現(xiàn)的,遍歷插入字段就行了)。
能不能簡(jiǎn)單一些呢?我可以把所有關(guān)鍵字放在一起,只用一個(gè)Where條件去實(shí)現(xiàn)嗎?
CHARINDEX登場(chǎng)
這時(shí)候,我們就可以用 CHARINDEX 關(guān)鍵字了,CHARINDEX可以返回某個(gè)字段在一串文字中出現(xiàn)的位置,跟String的indexOf用法類(lèi)似,不多廢話,我們來(lái)舉個(gè)栗子:
CHARINDEX('李白','曹操很帥') =0
在上面的栗子中,因?yàn)椴懿俸軒洸话畎钻P(guān)鍵字,所以找不到,返回0.
CHARINDEX('李白','李白很帥') =1
同樣的栗子,因?yàn)榘锢畎钻P(guān)鍵字,會(huì)返回關(guān)鍵字所在的開(kāi)頭第一個(gè)字的索引,所以返回1.
了解了使用方法之后,我們就可以運(yùn)用CHARINDEX關(guān)鍵字優(yōu)化下我們的SQL語(yǔ)句:
SELECT * FROM ConnectName WHERE CHARINDEX(name ,'小蘭灰原柯南')>0
如果name字段對(duì)應(yīng)的名字在 ‘小蘭灰原柯南' 中出現(xiàn),那么CHARINDEX函數(shù)就會(huì)返回大于1,就可以得到我們想要的數(shù)據(jù)啦(他們3個(gè)人也可以在一起愉快的玩??-^)
對(duì)應(yīng)的mybatis實(shí)現(xiàn)也相對(duì)簡(jiǎn)潔
SELECT * FROM ConnectName WHERE <!--[CDATA[ AND CHARINDEX(name ,#{傳入的參數(shù)}) --> 0 ]]>
如果后期我們想要加入一個(gè)新的人,比如毛利小五郎,只需要在傳入的參數(shù)中加入 ‘小蘭灰原柯南毛利小五郎' 就可以了,是不是簡(jiǎn)單了許多呢?
以上所述是小編給大家介紹的SQL字段的被包含查詢(xún)語(yǔ)句,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
SQL Server數(shù)據(jù)庫(kù)定時(shí)自動(dòng)備份
這篇文章主要為大家詳細(xì)介紹了SQL Server數(shù)據(jù)庫(kù)定時(shí)自動(dòng)備份的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03獲取MSSQL數(shù)據(jù)字典的SQL語(yǔ)句
獲取MSSQL數(shù)據(jù)字典的實(shí)現(xiàn)方法。2009-04-04SQL Server高可用的常見(jiàn)問(wèn)題分析
SQL Server高可用不就是微軟的那幾個(gè)技術(shù)嗎,如Replication, Failover Clustering,本文將詳細(xì)介紹,有需求的朋友可以參考下2012-11-11SQL Server中的排名函數(shù)與分析函數(shù)詳解
本文詳細(xì)講解了SQL Server中的排名函數(shù)與分析函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05SQL數(shù)據(jù)分頁(yè)查詢(xún)的方法
這篇文章主要為大家詳細(xì)介紹了SQL數(shù)據(jù)分頁(yè)查詢(xún)的四種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11SQLserver查詢(xún)數(shù)據(jù)類(lèi)型為ntext是空或NULL值的方法
SQLserver查詢(xún)數(shù)據(jù)類(lèi)型為ntext是空或NULL值的方法2010-07-07Sql Server中的系統(tǒng)視圖詳細(xì)介紹
這篇文章主要介紹了Sql Server中的系統(tǒng)視圖詳細(xì)介紹,本文講解了系統(tǒng)視圖是干什么呢、都定義在哪呢、一些使用例子等內(nèi)容,需要的朋友可以參考下2015-02-02sql server中千萬(wàn)數(shù)量級(jí)分頁(yè)存儲(chǔ)過(guò)程代碼
sql server中千萬(wàn)數(shù)量級(jí)分頁(yè)存儲(chǔ)過(guò)程代碼...2007-04-04