字符串格式如下:
初始103034Z2001
业务编号75037000374采购我想将两端的汉字去掉,想要得到的结果如下:
103034Z2001
75037000374

解决方案 »

  1.   

    你那两个汉字是固定出现还是不固定的,是固定两个字还是不固定的?
    固定直接用SUBSTR
    不固定的话,要写个函数去做了
      

  2.   

    SELECT TRANSLATE('初始103034Z2001', '1234567890ABCDEFGHIJGLMNOPQRSTUVWXYZ'||'初始103034Z2001', '1234567890ABCDEFGHIJGLMNOPQRSTUVWXYZ') AS A
    FROM   DUAL;已解决.方法如上
      

  3.   

    SELECT TRANSLATE('初始103034Z2001天才',
                     '1234567890ABCDEFGHIJGLMNOPQRSTUVWXYZ' || '初始103034Z2001',
                     '1234567890ABCDEFGHIJGLMNOPQRSTUVWXYZ') AS A
      FROM DUAL;
    这个好像不行!
      

  4.   

    楼主:用正则不好么?如果你的字符串变了呢。
    [^\u4e00-\u9fa5]+
      

  5.   

    [^\u4e00-\u9fa5]+
    这个就是能够过滤掉汉字的正则表达式
      

  6.   


    string strRegexRule = "[^\u4e00-\u9fa5]+";//正则表达式
    string strValue = "业务编号75037000374采购";//被测字符串
    Regex rg = new Regex(strRegexRule);
                
    if (rg.Matches(strValue).Count > 0)
    {
        MatchCollection mc = rg.Matches(strValue);
        foreach (Match m in mc)
        {                    
            Console.WriteLine(m);                  
        }
    }需要:
    using System.Text.RegularExpressions;
      

  7.   

    这样呢?
    select regexp_substr('汉字aaaaaa','[:alpha:]+') from dual
      

  8.   

    改正一下:
    如果是10G可以
    select regexp_substr('汉字aaaaaa','[^\u4e00-\u9fa5]+') from dual
    没想到居然字符集的问题居然不能用[:alpha:]过滤。
    还是上面的说得对!
      

  9.   

    select regexp_substr('汉字aaaaaa','[^\u4e00-\u9fa5]+') from dual 这样可以啊 高手指点 呵呵
      

  10.   

    SQL> select regexp_substr('汉字aaaaaa','[^\u4e00-\u9fa5]+') from dual;REGEXP_SUBST
    ------------
    汉字
    SQL> select regexp_substr('汉b字aaaaaa','[^\u4e00-\u9fa5]+') from dual;REGEXP_SUBSTR(
    --------------
    汉b字真有意思
      

  11.   

    SQL> select regexp_substr('汉c字aaaaaa','[^\u4e00-\u9fa5]+') from dual;REGEXP_SUBSTR(
    --------------
    汉c字SQL> select regexp_substr('汉aa字aaaaaa','[^\u4e00-\u9fa5]+') from dual;REGEXP
    ------

      

  12.   

    你们用的数据库是oracle么? 我这里只有sql server 2005
    在sql server 中怎么运行不起来,不懂,麻烦楼下赐教。
      

  13.   

    SQL> select regexp_substr('汉字aaaaaa','[:alpha:]+') from dual;REGEXP_SUBST
    ------------
    aaaaaa
    SQL> select regexp_substr('汉gg字aaaaaa','[:alpha:]+') from dual;REGEXP_SUBST
    ------------
    aaaaaa
    SQL> select regexp_substr('汉aaa字aaaaaa','[:alpha:]+') from dual;REGEXP
    ------
    aaaSQL> select regexp_substr('初始103034Z2001','[:alpha:]+') from dual;R
    -这....这....
      

  14.   

    大家看看我执行的sql有意思不?我建议楼主干脆在代码里处理算了,也不麻烦,还减轻数据库负担
    你查下汉字在utf8中编码所在的范围,写个函数做遍历,把这个范围的字符去掉就行了你在数据库里做还得考虑别的问题
      

  15.   

      10#的说实话我真的看正则式就晕 ,17#的我为什么也是ORACLE9i运行不了你的呢??说这个regexp_substr有问题?
      

  16.   

      select translate('abc13132xyz',
                       '1' || translate('abc13132xyz', 'a1234567890', 'a'),
                       '1')
        from dual
      

  17.   

    10g下测试
    SQL> Select REGEXP_REPLACE('abc123456中国','[[:alpha:]]','') AS RX_REPLACE FROM dual;RX_REPLACE
    ----------
    123456SQL> 
      

  18.   

    select substr('初始103034Z2001',起始,介绍) from dual
      

  19.   

    select substr('初始103034Z2001',起始,结束) from dual
      

  20.   

    有一个建议,楼主可以试下 对于9i的 
    select length('a'),lengthb('a'),length('啊') ,lengthb('啊') from dual 
    ---------------------------------
    LENGTH('A') LENGTHB('A') LENGTH('啊') LENGTHB('啊')
    1          1         1          2依次循环字符串的每个值,如果length () <> lengthb() 那就是汉字 
    直接跳过,循环下一个字符。
      

  21.   

    对于楼主的要求,这个方法还是比较完美的
    SELECT TRANSLATE('业务编号7503700Z0374采购',
      '1234567890ABCDEFGHIJGLMNOPQRSTUVWXYZabcdefghijglmnopqrstuvwxyz' || '业务编号7503700Z0374采购',
      '1234567890ABCDEFGHIJGLMNOPQRSTUVWXYZabcdefghijglmnopqrstuvwxyz') AS A
      FROM DUAL;正则[^\u4e00-\u9fa5]并不能完全比配汉字,有时候把字母都过滤了,比如s就会被过滤
    你网上搜搜TRANSLATE的含义就明白了