1. 程式人生 > >SQL模糊查詢碰到空值怎麼辦?

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

相關推薦

SQL模糊查詢碰到怎麼辦?

作者:iamlaosong SQL查詢語句用%來做模糊查詢,程式中一般要求使用者輸入部分資訊,根據這個資訊進行模糊查詢。例如使用者輸入340104,下面這條語句就是查詢昨天客戶程式碼為340104開頭

SQL 模糊查詢

配對 address string 引號 add table cell code 過程 SQL 模糊查詢 在進行數據庫查詢時,有完整查詢和模糊查詢之分。一般模糊查詢語句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 條件 其中關於

【轉】SQL模糊查詢

使用 模式 正則表達 bcd 一個 長度 排除 lsp [] 在進行數據庫查詢時,有完整查詢和模糊查詢之分。一般模糊查詢語句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 條件 其中關於條件,SQL提供了四種匹

SQL中將查詢結果賦給變數

DECLARE @sql nvarchar(4000),@called_calls  INT      SET  @sql  ='SELECT @a=COUNT(*) FROM users as u

sql 模糊查詢語句

用到sql模糊查詢時,發現之前資料庫課上學到的東西又還給老師了,就重溫一下。。。 先舉兩個例子,最後有like表示式的具體介紹: 1、查詢所有以“資料”開頭的課程名 select Cname from course where Cname like '資料%';

SQL---模糊查詢與正則表示式詳解和對比

1:模糊查詢 在進行資料庫查詢的時候,有完整查詢和模糊查詢之分; 完整查詢就是我們平時查詢的普通語句(對某個查詢條件確定的前提下),而模糊查詢就是常見的where 後面增加了 like 關鍵字。 一般模糊查詢語句如下: select 欄位 from 表 where 某欄位 l

【資料庫】SQL模糊查詢

SQL的模糊查詢是當不清楚資料庫中的具體關鍵詞時使用的一種查詢方式,最主要的關鍵詞時like,and與%。 like like用於在where子句中搜索列中的指定模式。 語法: SELE

關於SQL模糊查詢日期時間的方法

模糊查詢有以下三種方法: yourtime ~~~ 2017-06-30 1.Convert轉成String,在用Like查詢。 select * from table1   where conver

mysql 實行模糊查詢 一個輸入匹配多個欄位

mysql 實行模糊查詢  一個輸入值匹配多個欄位MySQL單表多欄位模糊查詢可以通過下面這個SQL查詢實現SELECT * FROM `magazine` WHERE CONCAT(`title`,`

SQL——模糊查詢

前言     在這個大資料時代,我們都離不開對資料的增刪改查,增加、刪除、修改這些看似都是一步完成的事情,但是對於查詢來說,好的查詢SQL可以大大的減少系統記憶體執行時間,提高系統的反應速度。這裡簡單

oracle sql模糊查詢時允許查詢特殊字元

這個只是一個知識點作為記錄,如果存在轉義符就使用oracle的escape欄位,此欄位是用來定義轉義符的 例如:select * from tb_vlan tv where tv.name like '%3/%%' escape '/'這樣查詢出來的結果可以是13%2

C#SQL SERVER中的問題

如果將C#中的null插入SQL SERVER中,那麼在表中的體現值是NULL[img][/img]在從資料讀取時,user.Description = (string)reader["description"];會報錯因此,在向SQL SERVER資料庫寫入資料時,如果是空

SQL模糊查詢

其中關於條件,SQL提供了四種匹配模式:1,% :表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號(%%)表示。 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三

SQL模糊查詢的引數化

用引數化SQL語句進行模糊查詢,一開始的使用方法不正確,摸索了好一會。 1、使用引數化SQL語句進行模糊查詢的正確方法:      //定義sql語句       string sql = "SELECT StudentID,StudentNO,StudentName FR

[C#.net]SQL參數傳入報錯解決方案

into else dbnull 沒有 通用 urn 輸入 query param C#中的null與SQL中的NULL是不一樣的,SQL中的NULL用C#表示出來就是DBNull.Value。 註意:SQL參數是不能接受C#的null值的,傳入null就會報錯。

SpringBoot框架下的SQL查詢結果時返回Map型別欄位為

今天在執行業務的時候發現在一次查詢時, 查詢出當一個欄位值為null時,封裝成Map型別返回的物件則不存在該值如:<select id="getUserDetail" parameterType="java.util.Map" resultType="java.util

寫一個sql語句,如果查詢的某個結果為時給出提示

1: select decode(cloumn_name ,null,'沒有資料,為空!!',cloumn) from table_name; 2:select case when column is null then 'tips' else column end from

Tingq 模糊查詢 共多少條數據 最大、小、平均、求和 升、降序

string sys post nat sender type asp idt acl 頁面代碼 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="

關於Oracle數據庫中SQL排序的問題

空格 如果 lec 語法 body 空字符 版本 其他 base 在Oracle中進行查詢排序時,如果排序字段裏面有空值的情況下,排序結果可能會達不到自己想要的結果。 如 select * from tableTest order by VISITS desc 將原

動態SQL中 實現條件參數 varchar類型的參數名稱 以及模糊查詢實現

pty set tab 條件 name 條件參數 arc str ble set @strSQL=‘select * from testtable AS P WHERE P.Type=‘+@PType+‘