4 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
在Oracle中,
<>
!=
~=
^=
都是不等于號(hào)的意思。都可以使用。
但是奇怪是的, 我想拿出price不是180000的商品時(shí):(price是Number類型的)
SELECT id, name FROM product where price<> 180000;
執(zhí)行這個(gè)語(yǔ)句時(shí),priceis null 的記錄不出來(lái)。也就是拿不到price是null的商品。必須使用:
SELECT id, name FROM product where price<> 180000 or price is null;才行。
字符串的字段存在同樣的問(wèn)題。
記?。簄ull只能通過(guò)is null或者is not null來(lái)判斷,其它操作符與null操作都是false。
======================================================================================================
測(cè)試:select * from test where name<>'xn'。只能查出name非空的記錄。去掉name<>'xn'就可以了。這種寫(xiě)法有問(wèn)題。
然后用了instr(name,'xn')=0 來(lái)判斷,如果name非空的話,判斷還是有效的。如果name為空,這個(gè)判斷又出問(wèn)題了。不得已只得采取instr(concat(name,'xx'),'xn') = 0來(lái)判斷,因?yàn)榫退鉵ame為空,當(dāng)和'xx'連接后,也會(huì)不為空的。
所以最后的sql語(yǔ)句為:
select * from test where instr(concat(name,'xx'),'xn') = 0 來(lái)查詢name字段不等于'xn'的記錄。
或者可以用 select * from test where nvl(name,'xx')<>'xn' 來(lái)查詢name字段不等于'xn'的記錄。

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
sql中有兩種方式表示不等于,一種是"<>"(不含引號(hào)),另一種是"!="(不含引號(hào)),用法是一樣的。
補(bǔ)充:
1、不等于:<> ,!=,~= ,^= 這四個(gè)符號(hào)據(jù)說(shuō)都可以在oracle中表示不等于,但是試了之后發(fā)現(xiàn)<> ,!= ,^=是可以的,~=不行,需要注意的是,只有<>是標(biāo)準(zhǔn)的sql語(yǔ)法,可以移植,其他的都是oracle平臺(tái)的特性,移植性較差,所以開(kāi)發(fā)中,盡量使用<>表示不等于。
2、等于:=不用多說(shuō),但是要進(jìn)行null的等于判斷時(shí),須使用is null 或is not null,null只能通過(guò)is null或者is not null來(lái)判斷,其它操作符與null操作都是false。
3、例子,select * from bl_ip_dt where amount <> 800,這條語(yǔ)句查不出amount等于null 的記錄,select * from bl_ip_dt where amount <> 800 or amount is null 才是可以的。
- 4 回答
- 0 關(guān)注
- 543 瀏覽
添加回答
舉報(bào)