1、通過ASCII碼判斷是否數(shù)字,介于[48, 57]之間,(ascii('0') = 48, ascii('9') = '57')
創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項目涵蓋了網(wǎng)頁視覺設(shè)計、VI標(biāo)志設(shè)計、全網(wǎng)整合營銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、成都做手機(jī)網(wǎng)站、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計、SEO優(yōu)化排名。設(shè)計、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都建筑動畫行業(yè)客戶提供了網(wǎng)站營銷服務(wù)。
2、調(diào)用cast函數(shù)嘗試強(qiáng)制轉(zhuǎn)換成NUMERIC或NUMBER,不是合法數(shù)字串即拋異常
3、調(diào)用translate函數(shù),剔除所有[0-9]數(shù)字后,看是否為空串
4、調(diào)用正則表達(dá)式,進(jìn)行模式匹配(10g版本新加入的功能)
--通過ASCII碼判斷是否數(shù)字,介于[48,?57]之間,(ascii('0')?=?48,?ascii('9')?=?'57')
DECLARE
str?????????????VARCHAR2(10)?:=?'123a';
val?????????????NUMERIC(10);
i???????????????int;
k???????????????int;
flag????????????BOOLEAN;
BEGIN
flag?:=?TRUE;
for?i?in?1..10?loop???--新密碼是否6位數(shù)字
k?:=?ascii(substr(str,?i,?1));
if?k??48?or?k??57?THEN
flag?:=?FALSE;
end?if;
end?LOOP;
IF?flag?=?true?THEN
dbms_output.put_line(str?||?'是[0-9]的數(shù)字序列');
ELSE
dbms_output.put_line(str?||?'不是[0-9]的數(shù)字序列');
END?IF;
END;
--?調(diào)用cast函數(shù)嘗試強(qiáng)制轉(zhuǎn)換成NUMERIC或NUMBER,不是合法數(shù)字串即拋異常
DECLARE
str????VARCHAR2(10)?:=?'123';
val????NUMERIC(10);
BEGIN
val?:=?CAST(str?AS?NUMERIC);
dbms_output.put_line(str?||?'是[0-9]的數(shù)字序列');
EXCEPTION
WHEN?value_error?THEN?--?字符串轉(zhuǎn)實數(shù)錯誤
--dbms_output.put_line(SQLCODE?||?',?'?||?SQLERRM);
dbms_output.put_line(str?||?'不是[0-9]的數(shù)字序列');
END;
--調(diào)用translate函數(shù),剔除所有[0-9]數(shù)字后,看是否為空串
DECLARE
str?VARCHAR2(10)?:=?'123abc';
BEGIN
IF?replace(translate(str,?'0123456789',?'0'),?'0',?'')?IS?NULL?THEN
dbms_output.put_line(str?||?'是[0-9]的數(shù)字序列');
ELSE
dbms_output.put_line(str?||?'不是[0-9]的數(shù)字序列');
END?IF;
END;
--調(diào)用正則表達(dá)式,進(jìn)行模式匹配(10g版本新加入的功能)
SELECT?*
FROM?dual
WHERE?regexp_like('1234',?'^[[:digit:]]+$');
--從任意字符串中提取數(shù)字串(調(diào)用2次translate函數(shù))。
--假定初始串為str。首先將str中數(shù)字全部替換為空格,輸出記為str2;
--其次,對每個在str中出現(xiàn)的任意str2串中字符,如果是str2的首字符則替換為空格,其它字符則全部剔除
DECLARE
--str????VARCHAR2(100)?:=?'?護(hù)照01浙江2?????3昆?山4蘇?3';
str????VARCHAR2(100)?:=?'?護(hù)照浙江?????昆?山蘇?4';
ret????VARCHAR2(10);
BEGIN
ret?:=?TRIM(TRANSLATE(str,?trim(TRANSLATE(str,?'1234567890',?'??????????')),?'?'));
dbms_output.put_line(ret);
END;
oracle本身沒有,得自定義一個函數(shù)
create or replace function isNumber(p in varchar2)
return number
is
result number;
begin
result := to_number(p);
return 1;
exception
when VALUE_ERROR then return 0;
end;
調(diào)用
select isNumber('abc123') from dual
或者
select isNumber('123') from dual
返回值為1,說明是數(shù)字,返回值是0,說明里邊包含非數(shù)字的字符
簡單的:一條語句搞定,SqlPlus里面select decode(length(replace(translate('字符串的值','0123456789.',' '),' ','')),0,'is number','is not a number') from dual; 麻煩點的:寫function在oracle數(shù)據(jù)庫中,create or replace function f_str_or_num(str varchar2) return varchar2 is
2 v_num number;
3 v_return varchar2(60);
4 begin
5 v_num:=to_number(str);
6 v_return:=str||' is a number string!';
7 return v_return;
8 exception when others then
9 v_return:=str||' is not a number string!';
10 return v_return;
11 end f_str_or_num; 然后調(diào)用select f_str_or_num('字符串的值) from dual;
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ù)值
1、創(chuàng)建測試表,
create table test_isnum(id number, value varchar2(20));
2、插入測試數(shù)據(jù),
insert into test_isnum values(1,'a');
insert into test_isnum values(2,329);
insert into test_isnum values(4,'15');
insert into test_isnum values(6,'2c');
commit;
3、查詢表中所有記錄,select t.*, rowid from test_isnum t,
4、編寫sql,判斷value字段,記錄為數(shù)字的內(nèi)容,
select t.*,
?case
? ?when not regexp_like(value, '\D') then
? ? '是'
? ?else
? ? '否'
?end as "是否數(shù)字"
from test_isnum t;