日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 判断字符串是否能转成数字。

發(fā)布時間:2025/3/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 判断字符串是否能转成数字。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Sybase 有自帶的系統(tǒng)函數(shù) isnumeric 來判斷1個字符是否能轉(zhuǎn)換成數(shù)字。

而Oracle沒有這個函數(shù),所以在sql語句使用to_number函數(shù)時有時候會因?yàn)閿?shù)據(jù)問題導(dǎo)致系統(tǒng)出錯。

解決方案有幾個,

一, 新建1個自定義函數(shù), 利用to_number,? 能轉(zhuǎn)換成to_number的就返回真, 轉(zhuǎ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;



二,這種方法不用新增自定義系統(tǒng)函數(shù),利用translate函數(shù),只需要加在where條件里。
例如下面這個sql語句
?select t.instance
?? from sys.v$thread? t,
??? ??? ?? sys.v$parameter? v
?? where v.name = 'thread'
?? and (v.value = '0' or
??? ???????? t.thread# = to_number(v.value))

因?yàn)楦吡磷志涞脑?#xff0c;v.value中存在不能轉(zhuǎn)成數(shù)字的字符數(shù)據(jù),所以是會報錯的。



而加入下面這些判斷后,

?select t.instance
?? from sys.v$thread? t,
??? ??? ?? sys.v$parameter? v
?? where v.name = 'thread'
?? and translate(v.value,'a1234567890.-','a') is null --必須由數(shù)字和"."和"-"組成
?? and translate(v.value,'1.-','1') is not null --去掉"."和"-"后至少1個字符,也就是至少有1個數(shù)字啦
?? and length(v.value) - length(replace(v.value,'.','')) < 2 --"."的個數(shù)必須少于2
?? and (instr(v.value,'-',0)= 0 or (???????????????????????? --沒有"-"
???????????????????????????????????? --或者只有1個"-"字符,而且用"-"開頭
??????????????????????????????????? (length(v.value) - length(replace(v.value,'-','')) = 1)
???????????????????????????????????? and? substr(v.value,1,1) ='-'))

?? and (v.value = '0' or
??? ???????? t.thread# = to_number(v.value))


就不會報錯了,因?yàn)樵趫?zhí)行to_number之前已經(jīng)把不符合要求的數(shù)據(jù)篩掉。
執(zhí)行了上面的條件后, 其實(shí)還有類似“-.6",".1" 這樣的數(shù)據(jù)保留,其實(shí)無所謂,因?yàn)閠o_number是可以無錯執(zhí)行的。
關(guān)于translate函數(shù)可以參考:http://nvd11.blog.163.com/blog/static/2000183122012112605432545/

總結(jié)

以上是生活随笔為你收集整理的Oracle 判断字符串是否能转成数字。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。