oracle數據中 模糊查找關鍵字like存在問題解決


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 '%%'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM