Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
          獲得字段數(shù)字部分
          ?
          ?
          ??? 在平常的數(shù)據(jù)處理中,特別是數(shù)據(jù)清洗階段,要獲取字段中數(shù)字部分往往都是經(jīng)常會(huì)用到的要求。所以專門找了一下有哪幾種方法可以實(shí)現(xiàn)這個(gè)功能。10g中已經(jīng)提供了正則表達(dá)式的功能,所以這個(gè)事情變得方便了很多,但是還是比較喜歡用translate函數(shù)來獲取的這個(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; --取文字
          ?
          ?
          ?
          posted on 2008-09-06 19:27 decode360 閱讀(246) 評(píng)論(0)  編輯  收藏 所屬分類: 05.SQL
          主站蜘蛛池模板: 阜宁县| 巴彦淖尔市| 青铜峡市| 孝昌县| 舞阳县| 太仓市| 汶川县| 新巴尔虎左旗| 民和| 仁化县| 佛学| 扬中市| 永州市| 布尔津县| 锡林浩特市| 龙游县| 牡丹江市| 会昌县| 宁化县| 高淳县| 清徐县| 吉林市| 乌拉特后旗| 保德县| 顺义区| 丹东市| 吉木乃县| 绵竹市| 阳新县| 阿城市| 和政县| 靖西县| 河间市| 图木舒克市| 乐山市| 兰州市| 绥滨县| 红原县| 夏河县| 青铜峡市| 曲沃县|