在Oracle中,

成都創(chuàng)新互聯(lián)公司專注于門頭溝企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)。門頭溝網(wǎng)站建設(shè)公司,為門頭溝等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站建設(shè),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
!=
~=
^=
都是不等于號(hào)的意思。都可以使用。
但是奇怪是的, 我想拿出price不是180000的商品時(shí):(price是Number類型的)
SELECT id, name FROM product where price 180000;
執(zhí)行這個(gè)語(yǔ)句時(shí),priceis null 的記錄不出來。也就是拿不到price是null的商品。必須使用:
SELECT id, name FROM product where price 180000 or price is null;才行。
字符串的字段存在同樣的問題。
記住:null只能通過is null或者is not null來判斷,其它操作符與null操作都是false。
測(cè)試:select * from test where name'xn'。只能查出name非空的記錄。去掉name'xn'就可以了。這種寫法有問題。
然后用了instr(name,'xn')=0 來判斷,如果name非空的話,判斷還是有效的。如果name為空,這個(gè)判斷又出問題了。不得已只得采取instr(concat(name,'xx'),'xn') = 0來判斷,因?yàn)榫退鉵ame為空,當(dāng)和'xx'連接后,也會(huì)不為空的。
所以最后的sql語(yǔ)句為:
select * from test where instr(concat(name,'xx'),'xn') = 0 來查詢name字段不等于'xn'的記錄。
或者可以用 select * from test where nvl(name,'xx')'xn' 來查詢name字段不等于'xn'的記錄。
1、自定義存儲(chǔ)過程,利用 to_number函數(shù)實(shí)現(xiàn)
CREATE?OR?REPLACE?FUNCTION?isnumeric?(str?IN?VARCHAR2)
RETURN?NUMBER
IS
v_str?FLOAT;
BEGIN
IF?str?IS?NULL
THEN
RETURN?0;
ELSE
BEGIN
SELECT?TO_NUMBER?(str)
INTO?v_str
FROM?DUAL;
EXCEPTION
WHEN?INVALID_NUMBER
THEN
RETURN?0;
END;
RETURN?1;
END?IF;
END?isnumeric;
2. 自定義存儲(chǔ)過程,利用 正則表達(dá)式函數(shù)regexp_like 實(shí)現(xiàn)
CREATE?OR?REPLACE?FUNCTION?isnumeric?(str?IN?VARCHAR2)
RETURN?NUMBER
IS
BEGIN
IF?str?IS?NULL
THEN
RETURN?0;
ELSE
IF?regexp_like?(str,?'^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$')
THEN
RETURN?1;
ELSE
RETURN?0;
END?IF;
END?IF;
END?isnumeric;
3. 自定義過程,利用 TRANSLATE函數(shù)實(shí)現(xiàn)
CREATE?OR?REPLACE?FUNCTION?isnumeric?(str?IN?VARCHAR2)
RETURN?NUMBER
IS
v_str?VARCHAR2?(1000);
BEGIN
IF?str?IS?NULL
THEN
RETURN?0;
ELSE
v_str?:=?TRANSLATE?(str,?'.0123456789',?'.');
IF?v_str?=?'.'?OR?v_str?=?'+.'?OR?v_str?=?'-.'?OR?v_str?IS?NULL
THEN
RETURN?1;
ELSE
RETURN?0;
END?IF;
END?IF;
END?isnumeric;
先不說你空值用0表示的問題
就是opdate=sysdate估計(jì)你也很難得到結(jié)果,sysdate表示系統(tǒng)當(dāng)前時(shí)間,包含時(shí)分秒,你那個(gè)opdate怎么可能會(huì)和sysdate相等呢?
真的要是把空值用0表示的話,oracle中有nvl函數(shù)
select nvl(workbillid,0) from kf_workbill
意思就是把workbillid字段為空的顯示成0,當(dāng)然也可以顯示成任何字符或者數(shù)字
友情提醒一下:
你那個(gè)opdate=sysdate是不是該改成
to_char(opdate,'yyyymmdd')=to_char(sysdate,'yyyymmdd')
CREATE OR REPLACE Function Isnumeric(Str In Varchar2)
Return Number
Is
Begin
If Str Is Null
Then
Return 0;
Else
If Regexp_Like(Str, '^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$') --數(shù)值
/*(str, '^[0-9]*[1-9][0-9]*$') --正整數(shù)*/
Then
Return 1;
Else
Return 0;
End If;
End If;
End Isnumeric;
創(chuàng)建上面的函數(shù),然后判斷返回值是否是1,1則表示是數(shù)值,0則表示非數(shù)值
文章名稱:oracle如何表示非0 oracle不等于0
標(biāo)題URL:http://chinadenli.net/article18/hjosgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、Google、全網(wǎng)營(yíng)銷推廣、外貿(mào)建站、企業(yè)網(wǎng)站制作、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)