Heim > Datenbank > MySQL-Tutorial > 在oracle中用like模糊搜索时如何使其能搜到空值

在oracle中用like模糊搜索时如何使其能搜到空值

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 15:45:09
Original
2363 Leute haben es durchsucht

oracle中查询关键字 like,当我用like执行模糊查找是,发现数据量不对,表的结构如下: -- Create table create table NEOERP( ID NUMBER ( 22 ) not null , PRODUCTNAME NVARCHAR2( 100 ) default ' ' , CT_SMP_SPECIFICATION NVARCHAR2( 100 ) default ' '

oracle中查询关键字 like,当我用like执行模糊查找是,发现数据量不对,表的结构如下:

在oracle中用like模糊搜索时如何使其能搜到空值

<span>--</span><span> Create table</span>
<span>create</span> <span>table</span><span> NEOERP
(
  ID                   </span><span>NUMBER</span>(<span>22</span>) <span>not</span> <span>null</span><span>,
  PRODUCTNAME          NVARCHAR2(</span><span>100</span>) <span>default</span> <span>'</span> <span>'</span><span>,
  CT_SMP_SPECIFICATION NVARCHAR2(</span><span>100</span>) <span>default</span> <span>'</span> <span>'</span><span>,
  TYPENAME             NVARCHAR2(</span><span>50</span><span>),
  UNIT                 NVARCHAR2(</span><span>30</span>) <span>default</span> <span>'</span> <span>'</span><span>,
  STORECODE            NVARCHAR2(</span><span>100</span>) <span>default</span> <span>'</span> <span>'</span><span>,
  ROOMCODE             NVARCHAR2(</span><span>100</span>) <span>default</span> <span>'</span> <span>'</span><span>,
  SAMPTMPLID           NVARCHAR2(</span><span>100</span><span>),
  CT_BELONG            NVARCHAR2(</span><span>100</span>) <span>default</span> <span>'</span> <span>'</span><span>,
  CT_MANUFACTURE       NVARCHAR2(</span><span>100</span><span>),
  CT_EXPORTER_PLACE    NVARCHAR2(</span><span>100</span><span>),
  REMARK               NVARCHAR2(</span><span>200</span><span>),
  LOGINDATE            DATE </span><span>default</span><span> sysdate,
  CT_SMP_TYPE          NVARCHAR2(</span><span>100</span><span>),
  SAMPLENAME           NVARCHAR2(</span><span>200</span><span>),
  SAMPLEDESCRIPTION    NVARCHAR2(</span><span>200</span><span>),
  STARTDATE            DATE,
  STATUS               NVARCHAR2(</span><span>2</span>) <span>default</span> <span>'</span><span>F</span><span>'</span><span>,
  REMOVE_DATE          DATE,
  TIMETYPE             NVARCHAR2(</span><span>10</span><span>),
  REPORTDATE           </span><span>NUMBER</span>(<span>22</span><span>),
  TIMEVALUE            </span><span>NUMBER</span>(<span>22</span><span>)
)
tablespace VGSM
  pctfree </span><span>10</span><span>
  initrans </span><span>1</span><span>
  maxtrans </span><span>255</span><span>
  storage
  (
    initial 64K
    minextents </span><span>1</span><span>
    maxextents unlimited
  );
</span><span>--</span><span> Add comments to the columns </span>
comment <span>on</span> <span>column</span><span> NEOERP.PRODUCTNAME
  </span><span>is</span> <span>'</span><span>产品名称</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.CT_SMP_SPECIFICATION
  </span><span>is</span> <span>'</span><span>规格</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.TYPENAME
  </span><span>is</span> <span>'</span><span>类别名称</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.UNIT
  </span><span>is</span> <span>'</span><span>单位</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.STORECODE
  </span><span>is</span> <span>'</span><span>存货编码</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.ROOMCODE
  </span><span>is</span> <span>'</span><span>物料编码</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.SAMPTMPLID
  </span><span>is</span> <span>'</span><span>样品模版id</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.CT_BELONG
  </span><span>is</span> <span>'</span><span>归属地</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.CT_MANUFACTURE
  </span><span>is</span> <span>'</span><span>生产地</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.CT_EXPORTER_PLACE
  </span><span>is</span> <span>'</span><span>出口地</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.REMARK
  </span><span>is</span> <span>'</span><span>备注</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.CT_SMP_TYPE
  </span><span>is</span> <span>'</span><span>样品类型</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.SAMPLENAME
  </span><span>is</span> <span>'</span><span>样品名称</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.SAMPLEDESCRIPTION
  </span><span>is</span> <span>'</span><span>样品描述</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.STARTDATE
  </span><span>is</span> <span>'</span><span>起始时间</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.STATUS
  </span><span>is</span> <span>'</span><span>f可用 状态</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.REMOVE_DATE
  </span><span>is</span> <span>'</span><span>删除时间</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.TIMETYPE
  </span><span>is</span> <span>'</span><span>年月日</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.REPORTDATE
  </span><span>is</span> <span>'</span><span>要求报告日期</span><span>'</span><span>;
comment </span><span>on</span> <span>column</span><span> NEOERP.TIMEVALUE
  </span><span>is</span> <span>'</span><span>有效期</span><span>'</span><span>;
</span><span>--</span><span> Create/Recreate primary, unique and foreign key constraints </span>
<span>alter</span> <span>table</span><span> NEOERP
  </span><span>add</span> <span>constraint</span> PK_ERP_ID <span>primary</span> <span>key</span><span> (ID)
  using </span><span>index</span><span> 
  tablespace VGSM
  pctfree </span><span>10</span><span>
  initrans </span><span>2</span><span>
  maxtrans </span><span>255</span><span>
  storage
  (
    initial 64K
    minextents </span><span>1</span><span>
    maxextents unlimited
  );</span>
Nach dem Login kopieren

在oracle中用like模糊搜索时如何使其能搜到空值

当我用SELECT * FROM NEOERP WHERE ROOMCODE LIKE '%%',来查询时候,数据一直存在问题,查处的数据量与期望的数据量不同,

经查,是当roomcode为null造成的,


当我用SELECT * FROM NEOERP WHERE ROOMCODE IS NULL 来查询发现这个查询的结果是我所缺少的数据信息。

null的含义,在我们不知道具体有什么数据,也即未知,称他为空,oracle中,含有空值的表列长度为零。

等价于没有任何值,是未知数,null与0,空字符串,空格不同,对空值做运算,结果仍然是空值,oracle提供了处理空值函数nvl,比较时候用 is null或者 is not null.



通过以上说明,通过SELECT * FROM NEOERP WHERE ROOMCODE LIKE '%%'查询不到值为null的数据。

对上面sql语句进行修改后,既可以完成所需功能:

SELECT * FROM NEOERP WHERE NVL(ROOMCODE,0) LIKE '%%';

注释:

ROOMCODE为null时,NVL(ROOMCODE,0)的返回值为0,而0正好符合匹配LIKE '%%'这个匹配模式,所以,ROOMCODE为null的数据行可以被查询出来。

附加:

空字符串"可以被like`%%`搜索到。


参考:

关于null的说明以及和0的区别


百度 like ‘%%’空值

====================================================================


SQL模糊查询碰到空值怎么办?

作者:iamlaosong

SQL查询语句用%来做模糊查询,程序中一般要求用户输入部分信息,根据这个信息进行模糊查询。例如用户输入340104,下面这条语句就是查询昨天客户代码为340104开头的所有邮件信息:

[sql] view plaincopy在oracle中用like模糊搜索时如何使其能搜到空值在oracle中用like模糊搜索时如何使其能搜到空值

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

当用户什么都不输入需要查询昨天所有邮件信息时,下面的语句并不能查询到所有信息,这条语句只能查到所有大客户的邮件信息,查不到散户的邮件信息:

[sql] view plaincopy在oracle中用like模糊搜索时如何使其能搜到空值在oracle中用like模糊搜索时如何使其能搜到空值

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

这是因为散户的客户代码为空值,下面这条语句可以同时兼顾上面两种情形(假定用0000代表空值):

有限定值:

[sql] view plaincopy在oracle中用like模糊搜索时如何使其能搜到空值在oracle中用like模糊搜索时如何使其能搜到空值

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

无限定值:

[sql] view plaincopy在oracle中用like模糊搜索时如何使其能搜到空值在oracle中用like模糊搜索时如何使其能搜到空值

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

限定值是0000时结果是所有散户:

[sql] view plaincopy在oracle中用like模糊搜索时如何使其能搜到空值在oracle中用like模糊搜索时如何使其能搜到空值

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

除了like,not like、not in 、等运算符号也都不包含空值,例如下面语句并不包含客户代码为空值的记录:

[sql] view plaincopy在oracle中用like模糊搜索时如何使其能搜到空值在oracle中用like模糊搜索时如何使其能搜到空值

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

要想包含,同样需要将条件改为:nvl(t.sender_cust_code,'0000') '34122600200300'

总之,当一个字段为空值时,表达式中无论是等于还是不等于,结果都为假,只有 is null结果为真。


Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage