獲得字段數(shù)字部分
?
?
??? 在平常的數(shù)據(jù)處理中,特別是數(shù)據(jù)清洗階段,要獲取字段中數(shù)字部分往往都是經(jīng)常會(huì)用到的要求。所以專(zhuān)門(mén)找了一下有哪幾種方法可以實(shí)現(xiàn)這個(gè)功能。10g中已經(jīng)提供了正則表達(dá)式的功能,所以這個(gè)事情變得方便了很多,但是還是比較喜歡用translate函數(shù)來(lái)獲取的這個(gè)方法,非常巧妙,這個(gè)是轉(zhuǎn)載的地址:
http://zhouwf0726.itpub.net/post/9689/191406
?
--該腳本可以直接拷貝運(yùn)行
--現(xiàn)有字符串'23456中國(guó)3-00=.,45',想得到結(jié)果2345630045
?
?
?
--方法一:translate函數(shù)
select translate('23456中國(guó)3-00=.,45','0123456789'||'23456中國(guó)3-00=.,45','0123456789') from dual;
?
?
--方法二:自定義函數(shù)
create or replace function f_filter_str(var_str varchar) return varchar
is
var_str_new varchar2(2000);
begin
for i in 1..length(var_str) loop
if ascii(substr(var_str,i,1))>=48 and ascii(substr(var_str,i,1))<=57 then
var_str_new := var_str_new || substr(var_str,i,1);
end if;
end loop;
return var_str_new;
end f_filter_str;
/
?
select f_filter_str('23456中國(guó)3-00=.,45') from dual;
?
?
--方法三:正則表達(dá)式
--oracle10g以上版本
select regexp_replace('23456中國(guó)3-00=.,45','[^0-9]') from dual;
?
?
--方法四:
create or replace and compile java source named stringutil as
?
import Java.io.*;
import Java.sql.*;
?
public class StringUtil
{
public static String filterStr2Num(String str){
String tmpstr = str;
String savestr;
String result = "";
for (int i=0;i<tmpstr.length();i++){
savestr = tmpstr.substring(i,i+1);
if (StringUtil.isNumeric(savestr)){
result+=savestr;
}
?
}
return result;
?
}
?
public static String filterStr2Str(String str){
String tmpstr = str;
String savestr;
String result = "";
for (int i=0;i<tmpstr.length();i++){
savestr = tmpstr.substring(i,i+1);
if (!StringUtil.isNumeric(savestr)){
result+=savestr;
}
?
}
return result;
?
}
?
?
public static boolean isNumeric(String str){
try{
Integer.valueOf(str);
return true;
}catch(Exception e){
return false;
}
}
}
?
--然后:
create or replace function Java_filterStr2Num(str In Varchar) return varchar2 as
LANGUAGE JAVA
NAME 'StringUtil.filterStr2Num(java.lang.String) return java.lang.String';
create or replace function Java_filterStr2Str(str In Varchar) return varchar2 as
LANGUAGE JAVA
NAME 'StringUtil.filterStr2Str(java.lang.String) return java.lang.String';
?
--再然后
Select java_filterStr2Num('254名字性345345別介紹') From dual; --取數(shù)字
Select java_filterStr2Str('254名字性345345別介紹') From dual; --取文字
?
?
?