程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle數據庫,忽略大小寫Like模糊查詢(SQL Server,MySql原理相同),oracle模糊查詢

Oracle數據庫,忽略大小寫Like模糊查詢(SQL Server,MySql原理相同),oracle模糊查詢

編輯:Oracle教程

Oracle數據庫,忽略大小寫Like模糊查詢(SQL Server,MySql原理相同),oracle模糊查詢


背景

在使用Oracle或者其它數據庫時,使用like 關鍵字進行模糊查詢是大家經常使用的功能,在純中文環境中使用非常好用,還有一些通配符可以使用,但是在純英文環境中,會出現大小需要精確匹配的問題,主要原因還是字符串的問題

FL like '%{0}%' and

這裡like後是一個字符串,這樣必然會有大小敏感的問題。比如如下的大小混編的字段

xxx

 

解決方案

方案1

使用Oracle系統函數對需要查詢的列字符串進行小寫轉換(大寫也行,變量相關部分都是大寫轉換),如下所示:

select * from logo where lower(bsname) like '%cz%'

 

當然這樣還是不夠的需要將代碼中變量也轉換成相應的小寫

String.Format(" select * from logo where lower(bsname) like '%{0}%'", tbfl.ToLower());

該方案的優點:

     數據庫兼容性好,sql server和mysql都可以按相應的原理來實現

缺點:

     sql和代碼中添加額外的函數代碼,看起來不是這麼干淨

方案2

使用Oracle 正則表達式語法,完成大小寫的模糊匹配 ,具體例子如下

   String.Format(" regexp_like(BSNAME,'[:graph:]*{0}[:graph:]*' ,'i') and", tbbs);

看到這裡可能有人會覺得寫的太淺了,可能覺得“regexp_like”,“[:graph:]*”是什麼鬼?

其實以本人實用主義的觀點出發完全已經夠用了,達到實現like模糊查詢的大小寫匹配也就夠了。

查閱了相關資料,發現oracle的正則表達式竟然對應java的(和c#的命名有些區別),這裡

regexp_like是oracle正則匹配的函數

[:graph:]*是匹配任意字符串(0或者n個字符)

“i”參數是忽略字符串大小的意思

具體如果想了解oracle 正則表達式的使用,參考資料我會附上一些外鏈。這裡其實也是我想吐槽的地方,可能也是作為一個實用主義者的一些想法吧,當時我做這個需求的時候,baidu到基本是方案2,但是一些資料基本都是把oracle 正則表達式列出來解釋一遍,其實我要的就是一個正則模擬like的功能而已,我想如果作為一個不是精通正則的新手,學習一大堆也未必能用的上,所以我才有把這篇文章分享出來想法,如果有需求就拿去用好了,如果真需要正則,那再深入學習。

該方案的優點:

     使用簡單,語句干淨,考慮的地方少

缺點:

     數據庫不兼容(別的數據庫可能函數不同,需要查閱資料)

 

寫在最後

     這篇文章很短,但是是我的原創,也是工作中的一些小的經驗,希望讀者您是通過搜索引擎找到它的,也希望它能對你的工作有所幫助,同時這也是我真正意義的第一篇原創博文,我也嘗試添加了打賞的功能,畢竟我還是屌絲,當然精神上的鼓勵也是一樣的,希望得到你們的鼓勵。btw,希望它是有用的!

 

免責聲明

     文章提供具體的思路和實現方式,但由於沒有執行嚴格的代碼測試,不保證執行100%正確,如果有問題也可以反饋給本人或者留言和本人討論,共同提高,共同進步。

 

相關資料

SQL Like 通配符

oracle正則表達式regexp_like的用法詳解

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved