oracle中查詢關鍵字 like,當我用like執行模糊查找是,發現數據量不對,表的結構如下:
-- Create table create table NEOERP ( ID NUMBER(22) not null, PRODUCTNAME NVARCHAR2(100) default ' ', CT_SMP_SPECIFICATION NVARCHAR2(100) default ' ', TYPENAME NVARCHAR2(50), UNIT NVARCHAR2(30) default ' ', STORECODE NVARCHAR2(100) default ' ', ROOMCODE NVARCHAR2(100) default ' ', SAMPTMPLID NVARCHAR2(100), CT_BELONG NVARCHAR2(100) default ' ', CT_MANUFACTURE NVARCHAR2(100), CT_EXPORTER_PLACE NVARCHAR2(100), REMARK NVARCHAR2(200), LOGINDATE DATE default sysdate, CT_SMP_TYPE NVARCHAR2(100), SAMPLENAME NVARCHAR2(200), SAMPLEDESCRIPTION NVARCHAR2(200), STARTDATE DATE, STATUS NVARCHAR2(2) default 'F', REMOVE_DATE DATE, TIMETYPE NVARCHAR2(10), REPORTDATE NUMBER(22), TIMEVALUE NUMBER(22) ) tablespace VGSM pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Add comments to the columns comment on column NEOERP.PRODUCTNAME is '產品名稱'; comment on column NEOERP.CT_SMP_SPECIFICATION is '規格'; comment on column NEOERP.TYPENAME is '類別名稱'; comment on column NEOERP.UNIT is '單位'; comment on column NEOERP.STORECODE is '存貨編碼'; comment on column NEOERP.ROOMCODE is '物料編碼'; comment on column NEOERP.SAMPTMPLID is '樣品模版id'; comment on column NEOERP.CT_BELONG is '歸屬地'; comment on column NEOERP.CT_MANUFACTURE is '生產地'; comment on column NEOERP.CT_EXPORTER_PLACE is '出口地'; comment on column NEOERP.REMARK is '備注'; comment on column NEOERP.CT_SMP_TYPE is '樣品類型'; comment on column NEOERP.SAMPLENAME is '樣品名稱'; comment on column NEOERP.SAMPLEDESCRIPTION is '樣品描述'; comment on column NEOERP.STARTDATE is '起始時間'; comment on column NEOERP.STATUS is 'f可用 狀態'; comment on column NEOERP.REMOVE_DATE is '刪除時間'; comment on column NEOERP.TIMETYPE is '年月日'; comment on column NEOERP.REPORTDATE is '要求報告日期'; comment on column NEOERP.TIMEVALUE is '有效期'; -- Create/Recreate primary, unique and foreign key constraints alter table NEOERP add constraint PK_ERP_ID primary key (ID) using index tablespace VGSM pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );
當我用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 '%%'