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执行模糊查找是,发现数据量不对,表的结构如下:
<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>
当我用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`%%`搜索到。
参考:
百度 like ‘%%’空值
====================================================================
作者:iamlaosong
SQL查询语句用%来做模糊查询,程序中一般要求用户输入部分信息,根据这个信息进行模糊查询。例如用户输入340104,下面这条语句就是查询昨天客户代码为340104开头的所有邮件信息:
[sql] view plaincopy
[sql] view plaincopy
有限定值:
[sql] view plaincopy
[sql] view plaincopy
[sql] view plaincopy
除了like,not like、not in 、等运算符号也都不包含空值,例如下面语句并不包含客户代码为空值的记录:
[sql] view plaincopy
要想包含,同样需要将条件改为:nvl(t.sender_cust_code,'0000') '34122600200300'
总之,当一个字段为空值时,表达式中无论是等于还是不等于,结果都为假,只有 is null结果为真。