可以用oracle自帶的正則表達式函數(shù)REGEXP_REPLACE把數(shù)字全部取出來,然后計算數(shù)字的長度是否等于這個字段的長度,如果等于的話說明這個值全部是數(shù)字,如果不等于的話說明值里面包含非數(shù)字,測試語句如下:
創(chuàng)新互聯(lián)專注于雙江企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開發(fā)。雙江網(wǎng)站建設(shè)公司,為雙江等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
SELECT(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL;---取出值里面的全部數(shù)字
SELECT LENGTH('LSS12345'),LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL; ---查詢出字段的長度和字段內(nèi)數(shù)字的長度
SELECT* FROM DUAL ?WHERE LENGTH('LSS12345') = LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) ; ?----查詢這個字段所有的純數(shù)字列
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ù)值
select?decode(instr('1',?'.')?+?sign('1'),?1,?1,?0)?from?dual;
返回1是整數(shù),否則不是
create?or?replace?function?f_isnumeric(cnt?varchar2)?return?number?asres?number;?flag?number;?beginif?cnt?is
null?thenreturn?0;
end?if;?select?to_number(cnt)?into?res?from?dual;?select?decode(instr(res,?'.')?+?sign(res),?1,?1,?0)?into?flag?from?dual;?if?flag?=?1?thenreturn?1;?else?return?0;
end?if;
exception
when?others?then?return?0;
end;
select * from table where int-floor(int)0 --int就是你的表字段,floor(int)就是取整數(shù),等同于3.100-30