zoukankan      html  css  js  c++  java
  • 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结果为真。


  • 相关阅读:
    浅析嵌入式程序设计中的优化问题
    TCP粘包问题
    使用python 批量 配对t检验 医学 基础研究 数据分析
    Ubuntu误删系统文件修复办法
    飞思卡尔powerpc交叉编译环境的
    ubuntu packege下载网址
    数组对象里面对日期进行排序
    c# 字符串以逗号分割属性加上单引号
    Vue mysql 变量赋值, 获取数组
    Element vue Select 下拉框默认
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6805383.html
Copyright © 2011-2022 走看看