SQL模糊查詢碰到空值怎么辦?


作者:iamlaosong

SQL查詢語句用%來做模糊查詢。程序中一般要求用戶輸入部分信息,依據這個信息進行模糊查詢。

比如用戶輸入340104,以下這條語句就是查詢昨天客戶代碼為340104開頭的全部郵件信息:

select *  from tb_evt_mail_clct t
 where t.clct_date = trunc(sysdate - 1)
   and t.sender_cust_code like '340104%'

當用戶什么都不輸入須要查詢昨天全部郵件信息時,以下的語句並不能查詢到全部信息,這條語句僅僅能查到全部大客戶的郵件信息,查不到散戶的郵件信息:

select *  from tb_evt_mail_clct t
 where t.clct_date = trunc(sysdate - 1)
   and t.sender_cust_code like '%'

這是由於散戶的客戶代碼為空值。以下這條語句能夠同一時候兼顧上面兩種情形(假定用0000代表空值):

有限定值:

select *  from tb_evt_mail_clct t
 where t.clct_date = trunc(sysdate - 1)
   and nvl(t.sender_cust_code,'0000') like '340104%'

無限定值:

select *  from tb_evt_mail_clct t
 where t.clct_date = trunc(sysdate - 1)
   and nvl(t.sender_cust_code,'0000') like '%'

限定值是0000時結果是全部散戶:

select *  from tb_evt_mail_clct t
 where t.clct_date = trunc(sysdate - 1)
   and nvl(t.sender_cust_code,'0000') like '0000%'

除了like。not like、not in 、<>等運算符號也都不包括空值,比如以下語句並不包括客戶代碼為空值的記錄:

select *  from tb_evt_mail_clct t
 where t.clct_date = trunc(sysdate - 1)
   and t.sender_cust_code <> '34122600200300'

要想包括。相同須要將條件改為:nvl(t.sender_cust_code,'0000') <> '34122600200300'

總之。當一個字段為空值時。表達式中不管是等於還是不等於,結果都為假,僅僅有 is null結果為真。



免責聲明!

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



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