我要在年份外加括号,比如 重百用(2004)第32号,但是现在数据库中的数据格式不统一,有的是没括号,有的是有括号,还有的是全角括号,现在要求统一为半角括号,只能肯定用字后一定是括号,因为前面的字可能是重用(2005)第2号,这个替换SQL怎么写啊?在oracle里.不胜感谢!!!!

解决方案 »

  1.   

    注:在Oracle里全角的(和半角的(是有区别的,这里打出来都一样了!测试数据
    重百用(2004)第32号
    重百用2004第320号
    重用2005第1358号
    重轻工用(2005)第244号
      希望结果:
    重百用(2004)第32号
    重百用(2004)第320号
    重用(2005)第1358号
    重轻工用(2005)第244号
      

  2.   

    --建立测试数据
    create table t( cname varchar2(100) )
    insert into t 
    select '2004第2号' from dual union all
    select '(2004)第2号' from dual union all
    select '(2004)第2号' from dual union all
    select '(2004)第2号' from dual;--测试数据
    select * from t1 2004第2号
    2 (2004)第2号
    3 (2004)第2号
    4 (2004)第2号
    --执行更新
    update t set 
    cname=(case when substr(cname,1,1)='(' then replace(replace('(2004)第2号','(','('),')',')')
                when substr(cname,1,1)='(' then cname
                else replace(cname,substr(cname,1,4),'('||substr(cname,1,4)||')') end);
    --执行查询            
    select * from t           
    --查询结果
    1 (2004)第2号
    2 (2004)第2号
    3 (2004)第2号
    4 (2004)第2号
      

  3.   

    有规律啊,用字后一定是(,第字前一定是),我在程序里实现了,但是写成SQL就不会了啊!!
      

  4.   

    --建立测试数据
    create table t( cname varchar2(100) )
    delete from t
    insert into t 
    select '重百用(2004)第32号' from dual union all
    select '重百用2004第320号' from dual union all
    select '重用2005第1358号' from dual union all
    select '重轻工用(2005)第244号' from dual;--测试数据
    select * from t1 重百用(2004)第32号
    2 重百用2004第320号
    3 重用2005第1358号
    4 重轻工用(2005)第244号--执行更新
    update t set 
    cname=(case when instr(cname,'(',1)>0 then replace(replace(cname,'(','('),')',')')
                when instr(cname,'(',1)>0 then cname
                else replace(cname,substr(cname,instr(cname,'第',1)-4,4),'('||substr(cname,instr(cname,'第',1)-4,4)||')') end);
    --执行查询            
    select * from t           
    --查询结果
    1 重百用(2004)第32号
    2 重百用(2004)第320号
    3 重用(2005)第1358号
    4 重轻工用(2005)第244号