作者: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結果為真。
