解決Oracle模糊查詢like '%%'查不出字段值為null的數據--oracle的nvl和hql的coalesce函數


like '%%'看起來好像是全查數據,實則是除了null值的所有數據。

經常遇到一種業務是前端輸入框模糊查詢數據,可以輸入也可以不輸入,這種情況雖然可以在后端分成為空和不為空兩種情況去查詢數據,但是一旦這種輸入框多了,那么一個輸入框2種情況,有多少輸入框就有2的多少次方種情況。如果like '%%'的字段是不可為空的,那么就無需擔心,要擔心的是那些可以為空的字段。

要使like '%%'能查出值為null的數據,那么就得用oracle的nvl函數。

nvl(字段,替換的值)

select * from colossus_crdj where zt_Id=9 and rq>=to_date('2020-11-13 00:00:00','YYYY-MM-DD HH24:MI:SS') 

and rq<to_date('2020-11-14 00:00:00','YYYY-MM-DD HH24:MI:SS') and sj>=0 and sj<=235959 and xm like '%%' and nvl(bz,' ') like '%%';

注意上面sql的nvl(bz,'  ') like '%%',查詢時遇到bz字段的值為null時,替換成' ',注意兩個單引號之間是有空格的,或者可以替換成自己想要的字符,不過最好不要用其他字符吧,萬一前端要模糊查詢的就是您替換的那個字符串呢

這樣就可以查出值為空的數據了。

但是hibernate中的hql語法沒有nvl,hql的coalesce函數跟oracle的nvl函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM