溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Oracle中通過一個關(guān)鍵字匹配多個字段

發(fā)布時間:2021-05-20 15:50:15 來源:億速云 閱讀:131 作者:Leah 欄目:數(shù)據(jù)庫

怎么在Oracle中通過一個關(guān)鍵字匹配多個字段?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

分析:

一般情況下,我們的一個輸入框?qū)?yīng) 數(shù)據(jù)庫 的某一列信息的搜索,比如,要搜索姓名為 ‘李' 姓開頭的,那么對應(yīng)的 sql 就是

where name like '李%'

但是,現(xiàn)在輸入框有了不確定性,不知道用戶到底會輸入什么,導(dǎo)致我們后臺的 sql 不知道該如何對應(yīng)了,

比如,用戶輸入 18,很明顯,用戶是想搜索 年齡為 18 的用戶,如果 后臺sql 還是 where name like '18%',那么就會 搜索不到內(nèi)容了。

方案一:

我們可以用 or 這種關(guān)鍵字來實(shí)現(xiàn) 多字段匹配,

比如:where name like '%搜索內(nèi)容%' or age like '%搜索內(nèi)容%'

這種方案對于 搜索字段比較 少的可以嘗試,但是效率不高。

方案二:推薦

我們可以換一種思路

假設(shè)我們的數(shù)據(jù)庫每一行都有一個完整的列 (colum),這個列的內(nèi)容為 該行所有字段的內(nèi)容。

那么我們搜索的sql 的可以改寫為 where colum like '%搜索內(nèi)容%'

這樣 不論搜索 姓名 ,還是 年齡,地址 等,我們都可以查到。

既然到這里了,我相信你已經(jīng)明白該怎么做了。

其實(shí),就是用 sql 把需要可能 被用戶搜索的 數(shù)據(jù)庫字段拼接 起來,然后再  like '%搜索內(nèi)容%'  就可以了。

oracle 做法

可以采用 instr() 函數(shù),這里說下 INSTR()函數(shù)的作用

INSTR(參數(shù)1,參數(shù)2)其實(shí)是一個查找字符串的函數(shù),返回的是字符串查找的位置,它有兩個參數(shù)都是字符類型,如果找到則返回參數(shù)2在參數(shù)1中的位置,如果沒有找到則返回 0。

SELECT INSTR('abcde', 'a') FROM DUAL;

--------------------------------------------

1

--------------------------------------------

結(jié)果分析,因?yàn)閍在abcde的第一個位置,所以返回1

SELECT INSTR('abcde', 'f') FROM DUAL;

--------------------------------------------

0

--------------------------------------------

 結(jié)果分析,因?yàn)閒在abcde串中找不到,所以返回0

這里 對比 like 與 instr() 函數(shù), 如果對性能 要求比較嚴(yán)格的 童鞋,記得來這里 用 instr () 來 替換 like 關(guān)鍵字

colum like '%搜索內(nèi)容%'
等價于
instr(colum, '搜索內(nèi)容', 1, 1)>0
colum like '搜索內(nèi)容%'
等價于
instr(colum, '搜索內(nèi)容', 1, 1)=1
colum like '%搜索內(nèi)容'
等價于
instr(colum, '搜索內(nèi)容', 1, -1)=length(colum)-length('搜索內(nèi)容')+1

sql:

oracle    ||   代表拼接多個 數(shù)據(jù)庫列

一般情況:where instr(姓名||年齡||地址,'搜索內(nèi)容',1,1) > 0

如果兩個數(shù)據(jù)列相鄰,采用 ',' 分割,防止搜索到不匹配內(nèi)容:

 where instr(姓名|| ',' || 年齡|| ',' || 地址 ,'搜索內(nèi)容',1,1) > 0

如果字段為空,可以用 nvl (字段名,''),來處理,他的意思是 用 ‘'代替 空的內(nèi)容

mysql

concat 拼接多個數(shù)據(jù)庫 列

instr 查詢

where instr (concat(姓名,年齡,地址),'搜索內(nèi)容') > 0

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI