前言
今天在使用Oracle查詢“不等於”的時候,發現得到的數據與期望中的不一樣,進一步查找資料才有發現。
1、Oracle的不等於
在Oracle中,"<>"、"!="、"^="都是表示“不等於”,都可以拿來使用。
但是,在我使用的時候,卻發現得不到我想要的數據,如下:
--查詢 IS_JOB_CREATE != 2 的數量; SELECT count(1) FROM gccsdb.CCS_MSALE_RCMD_SETTING t where t.IS_JOB_CREATE != 2; --> count(1) = 0
執行語句之后,發現 t.IS_JOB_CREATE = NULL 的數據,一條也沒有命中。查資料之后發現,NULL 只能用 is not null 或 is null 來判斷,如下:
--查詢 IS_JOB_CREATE != 2 的數量; SELECT count(1) FROM gccsdb.CCS_MSALE_RCMD_SETTING t where t.IS_JOB_CREATE != 2 or t.IS_JOB_CREATE is null; --> count(1) = 224
這就有值了,但這並不是我們想要的數據。
2、改造
既然 NULL 不能用 != 命中,那我就想辦法把 NULL 賦值。這里采用兩種方式,如下:
--查詢 IS_JOB_CREATE != 2 的數量; SELECT count(1) FROM gccsdb.CCS_MSALE_RCMD_SETTING t where instr(concat(t.IS_JOB_CREATE, 1), 2) = 0; SELECT count(1) FROM gccsdb.CCS_MSALE_RCMD_SETTING t where nvl(t.IS_JOB_CREATE,1) != 2;
小結
簡單記錄下,以便今后遺忘時再次查找。