update 表 set cc=left(stuff(AA,1,patindex('%[%]',AA),''),charindex(']',stuff(AA,1,patindex('%[%]',AA),'')
)-1)
from 表
where patindex('%[%]%',AA)>0

解决方案 »

  1.   

    --上面写错了,[在patindex中是特殊字符,改为:update 表 set cc=left(stuff(AA,1,patindex('%[[]%]%',AA),''),charindex(']',stuff(AA,1,patindex('%[[]%]%',AA),'')
    )-1)
    from 表
    where patindex('%[[]%]%',AA)>0
      

  2.   

    To邹建:我的表共有AA,BB,CC,DD,EE,4列,提出BB列中中括号里的数据到CC列中,同时要删掉BB列中的中括号以及其里边的内容,你写的好象有点不对呀,测试不通过。
      

  3.   


    drop table #t
    --输入数据
    create table #t ( a varchar(10),b varchar(20),c varchar(10))
    insert into #t select 'AAE'  ,'Annaba [El Mellah]',      NULL  union all
    select 'AAR'  ,'Aarhus [Tirstrup]',      NULL union all
    select 'ABJ'  ,'Abidjan [Felix]',      NULL 
    --原来数据
    select * from #t
    --更新
    update #t set b = left (b,charIndex('[',b)-1),c = substring(b,charIndex('[',b)+1,charIndex(']',b)-charIndex('[',b)-1)
    --结果
    select * from #t
      

  4.   

    --写错字段了
    update 表 set BB=left(BB,patindex('%[[]%]%',BB)-1)
       ,cc=left(stuff(BB,1,patindex('%[[]%]%',BB),''),charindex(']',stuff(BB,1,patindex('%[[]%]%',BB),'')
    )-1)
    from 表
    where patindex('%[[]%]%',BB)>0
      

  5.   

    --测试数据
    create table #t ( aa varchar(10),bb varchar(20),cc varchar(10))
    insert into #t select 'AAE'  ,'Annaba [El Mellah]',      NULL  union all
    select 'AAR'  ,'Aarhus [Tirstrup]',      NULL union all
    select 'ABJ'  ,'Abidjan [Felix]',      NULL --更新
    update #t set BB=left(BB,patindex('%[[]%]%',BB)-1)
       ,cc=left(stuff(BB,1,patindex('%[[]%]%',BB),''),charindex(']',stuff(BB,1,patindex('%[[]%]%',BB),'')
    )-1)
    from #t
    where patindex('%[[]%]%',BB)>0--结果
    select * from #t--删除测试
    drop table #t/*--测试结果aa         bb                   cc         
    ---------- -------------------- ---------- 
    AAE        Annaba               El Mellah
    AAR        Aarhus               Tirstrup
    ABJ        Abidjan              Felix(所影响的行数为 3 行)
    --*/