Oracle 特殊字元模糊查詢的方法

來源:互聯網
上載者:User

標籤:

最近在寫DAO層的時候,遇到一個問題,就是使用like進行模糊查詢時,輸入底線,無法精確查到資料,而是返回所有的資料。

這讓我很好奇,百度之後才發現,原來是因為有些特殊字元需要進行轉義才可以進行查詢。

首先理解一下什麼是特殊字元。

在ascii碼錶中,特殊字元的範圍如下。即從32~47 58~64 91~96 123~126。

模糊查詢時,有兩種方法可以進行轉換。

1. 使用REGEXP_LIKE方法,這是個使用Regex來查詢的方法,因此有此字元需要進行轉義才能查詢,如$ *等,轉義符為反斜線\,因此反斜線也要進行轉。這裡只討論字元中包含某字串的情況,對於Regex的匹配不作討論。

2. 使用like關鍵字,配合escape關鍵字進行轉義。

字元匹配操作可以使用萬用字元 “%” 和 “_”:%:表示任意個字元,包括零個; _:表示一個任一字元;上文說到輸入底線會查出所有就是因為只要有任意一個字元都可以查詢出來。同時,對於單引號,在oracle中,例如select * from tableTest t where t.name like ‘%‘%‘ escape ‘\‘ 那麼like語句中的‘會與前一個單引號匹配,造成語法錯誤。使用轉義符號也無法正常結束。需要將單個單引號轉成兩個單引號,select * from tableTest t where t.name like ‘%‘‘%‘ escape ‘\‘因此,上面兩個字元,以及用來轉義的字元(通常使用反斜線)需要進行轉義。 
那麼問題又來了,在Java代碼中,如果使用JDBC的PreparedStatement進行先行編譯,是不是就可以不需要進行轉義了?just do it!答案是否定的,還是需要進行轉義。注意下面,沒有進行轉義,查出的結果仍然是所有記錄。轉義後就精確了。還應注意兩點:1. jdbc會自動加上單引號,賦值時不必添加單引號2. jdbc會自動將單個單引號轉換成兩個的,賦值時不必寫兩個單引號  

 

Oracle 特殊字元模糊查詢的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.