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

来源:http://www.cnblogs.com/IlidanStormRage/archive/2016/07/29/5718915.html
-Advertisement-
Play Games

背景 在使用Oracle或者其它資料庫時,使用like 關鍵字進行模糊查詢是大家經常使用的功能,在純中文環境中使用非常好用,還有一些通配符可以使用,但是在純英文環境中,會出現大小需要精確匹配的問題,主要原因還是字元串的問題 FL like '%{0}%' and 這裡like後是一個字元串,這樣必然 ...


背景

在使用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的用法詳解


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Oracle中因為沒有top關鍵字,所以在sqlserver中的分頁代碼並不適用於Oracle,那麼在Oracle中如何來實現分頁呢? --查詢所有數據 比如說我要查詢stuInfo表中第二到第四條記錄 --兩層嵌套分頁 --如果我沒有對原始表有其他的排序操作的話,兩層嵌套就可以滿足需求了,但是如 ...
  • --創建一個新用戶NewUser 並設置密碼為1 create user NewUser identified by 1; --為該用戶賦予許可權 grant connect , Resource to NewUser; ...
  • Spark從1.6.0版本開始,記憶體管理模塊就發生了改變,舊版本的記憶體管理模塊是實現了StaticMemoryManager 類,現在被稱為"legacy"。"Legacy"模式預設被置為不可用,這就意味著當你用Spark1.5.x和Spark1.6.x運行相同的代碼會有不同的結果,應當多加註意。考 ...
  • 這是spark1.5及以前堆記憶體分配圖 下邊對上圖進行更近一步的標註,紅線開始到結尾就是這部分的開始到結尾 spark 預設分配512MB JVM堆記憶體。出於安全考慮和避免記憶體溢出,Spark只允許我們使用堆記憶體的90%,這在spark的spark.storage.safetyFraction 參數 ...
  • 一、介紹基本資料庫的埠號、 SQLServer 埠號:1433 MySql 埠號:3306 Oracle 埠號:1521 二、orcl的基礎介紹 1)什麼是orcl 是一款關係型(二維表)資料庫,可以用來存儲海量數據。在大數據量併發檢索的情況下,性能要高於其他的同類資料庫產品。一般運行環境是 ...
  • 安裝 配置資料庫 配置驅動 配置連接 配置驅動 配置連接 如果你的工作中,需要使用到多個資料庫,又不想在多種客戶端之間切換來切換去。那麼就需要找一款支持多資料庫的客戶端工具了。如果你要連接多個關係型資料庫,你就可以使用Navicat Premium。但是如果你有使用到NOSQL(譬如HBase、Mo ...
  • 當我看到sql執行很慢的時候就在想為什麼這麼慢? 不外乎數據大,sql語句複雜,沒有索引。 如果要進行優化的話可以從對應的這三個問題出發: 看看表是否可以進行拆分成小表,拆分sql語句,建立適合的索引。 還有查看sql server官方API文檔,瞭解sql的關鍵字執行順序,瞭解執行順序後才能更好的 ...
  • 1.事務的四個屬性 原子性Atomicity,一致性Consistency,隔離性Isolation,持久性Durability ,即ACID特性。 原子性:事務必須是一個完整工作的單元,要麼全部執行,要麼全部不執行。 一致性:事務結束的時候,所有的內部數據都是正確的。 隔離性:併發多個事務時,各個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...