一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫(kù)技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫(kù) - Oracle - Oracle 實(shí)現(xiàn) 一個(gè)關(guān)鍵字 匹配多個(gè) 字段的方法

Oracle 實(shí)現(xiàn) 一個(gè)關(guān)鍵字 匹配多個(gè) 字段的方法

2020-04-12 15:27stormlong Oracle

這篇文章主要介紹了Oracle 實(shí)現(xiàn) 一個(gè)關(guān)鍵字 匹配多個(gè) 字段的方法,本文給大家提供兩個(gè)方案,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下

有這么一個(gè)需求,滿足只有一個(gè)輸入框的條件下,支持不同數(shù)據(jù)列的搜索結(jié)果。

說(shuō)白了,就是這個(gè) 輸入框  既可以用來(lái) 搜索姓名,也可以搜索 年齡,地址等。

分析:

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

where name like '李%'

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

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

方案一:

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

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

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

方案二:推薦

我們可以換一種思路

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

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

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

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

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

oracle 做法

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

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

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

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

1

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

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

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

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

0

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

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

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

?
1
2
3
4
5
6
7
8
9
colum like '%搜索內(nèi)容%'
等價(jià)于
instr(colum, '搜索內(nèi)容', 1, 1)>0
colum like '搜索內(nèi)容%'
等價(jià)于
instr(colum, '搜索內(nèi)容', 1, 1)=1
colum like '%搜索內(nèi)容'
等價(jià)于
instr(colum, '搜索內(nèi)容', 1, -1)=length(colum)-length('搜索內(nèi)容')+1

sql:

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

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

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

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

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

mysql

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

instr 查詢(xún)

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

總結(jié)

以上所述是小編給大家介紹的Oracle 實(shí)現(xiàn) 一個(gè)關(guān)鍵字 匹配多個(gè) 字段的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

原文鏈接:https://www.cnblogs.com/stormlong/archive/2019/05/16/10876912.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产人成精品午夜在线观看 | 白丝打脚枪 | 国产色网址 | 国产性做久久久久久 | 欧美丰满大乳大屁在线观看股 | 日韩视频在线观看中字 | 日本无吗免费一二区 | 黄 色 成 年人在线 幻女free性俄罗斯第一次摘花 | 成人免费观看在线视频 | 成人毛片高清视频观看 | 午夜私人影院在线观看 视频 | 国产rpg迷雾之风冷狐破解 | 农夫69小说小雨与农村老太 | 日日摸夜夜爽色婷婷91 | 亚洲国产精品久久久久 | 天天操天天射天天色 | 国产一卡 | 日本不卡在线视频高清免费 | 窝窝午夜理伦影院 | 毛片大全免费看 | 日韩精品视频美在线精品视频 | 免费看黄色一级 | 国产精品日韩欧美一区二区三区 | 甜蜜惩罚小说 | 毛片的网站| 亚洲成av人在线视 | 四虎在线视频免费观看 | 天海翼三级 | 亚洲黄色免费在线观看 | 亚洲视频免 | 日韩免费在线观看 | 2015台湾永久免费平台 | 国内精品久久久久久野外 | 国产精品资源在线观看 | 全肉一女n男np高h双龙养成 | 欧美a级v片不卡在线观看 | 天堂男人在线 | 肉文高h调教 | 亚洲男人天堂网站 | 视频在线观看高清免费看 | 天天摸天天碰色综合网 |