create table tb(clime varchar(20) , unit varchar(20))
insert into tb values('海南省', '电信(全省共用)') 
insert into tb values('辽宁'  , '网通') 
goselect clime = clime + substring(unit , charindex('(',unit) + 1 , charindex(')',unit) - charindex('(',unit) - 1) ,
       unit  = left(unit , charindex('(',unit) - 1)
from tb where charindex('(',unit)  > 0 and charindex(')',unit) > 0 and charindex('(',unit) < charindex(')',unit) 
union all
select * from tb where charindex('(',unit) = 0drop table tb/*
clime                                    unit                 
---------------------------------------- -------------------- 
海南省全省共用                                  电信
辽宁                                       网通(所影响的行数为 2 行)
*/

解决方案 »

  1.   

    DECLARE @T TABLE(clime NVARCHAR(20), unit NVARCHAR(20)) 
    INSERT @T SELECT N'海南省', N'电信(全省共用)' 
    INSERT @T SELECT N'辽宁' ,N'网通' 
    SELECT clime= CASE WHEN CHARINDEX('(',UNIT)>0 THEN CLIME+SUBSTRING(UNIT,CHARINDEX('(',UNIT)+1,CHARINDEX(')',UNIT)-CHARINDEX('(',UNIT)-1)
    ELSE clime END,
    unit=CASE WHEN CHARINDEX('(',UNIT)>0  THEN LEFT(UNIT,CHARINDEX('(',UNIT)-1) ELSE unit END  FROM @T
    /*clime                                    unit                 
    ---------------------------------------- -------------------- 
    海南省全省共用                                  电信
    辽宁                                       网通
    */
      

  2.   

    good!
    dawugui兄和wufeng4552兄,真是经验丰富!多谢!
      

  3.   

    if object_id('[tb1]') is not null drop table [tb1]
    go
    create table [tb1]([clime] varchar(20),[unit] varchar(14))
    insert [tb1]
    select '海南省','电信(全省共用)' union all
    select '辽宁','网通'select * from [tb1]select  clime=clime+substring(unit,charindex('(',unit)+1,len(unit)-charindex('(',unit)-1)
    ,unit=case charindex('(',unit) when 0 then unit else left(unit,charindex('(',unit)-1) end
    from tb1--测试结果:
    /*
    clime                unit
    -------------------- --------------
    海南省全省共用       电信
    辽宁网               网通(2 行受影响)*/
      

  4.   

    还要考虑括号内有没有可能有括号,例如:
    create table tb(clime varchar(20) , unit varchar(40))
    insert into tb values('海南省', '电信(全省共用)') 
    insert into tb values('辽宁'  , '网通') 
    insert into tb values('海南省', '电信(全省(代码1234)共用)') 
    go则只有 szx1999 方法正确.
      

  5.   

    if object_id('[tb2]') is not null drop table [tb2]
    go
    create table tb2(clime varchar(20) , unit varchar(40))
    insert into tb2 values('海南省', '电信(全省共用)')
    insert into tb2 values('辽宁'  , '网通')
    insert into tb2 values('海南省', '电信(全省(代码1234)共用)') 
    insert into tb2 (clime) values('辽宁') 
    select * from [tb2]wufeng4552兄的出来会少右括号,结果如下:
    clime unit
    海南省全省共用 电信
    辽宁 网通 
    海南省全省(代码1234 电信
    辽宁 NULLszx1999兄的出来没少括号,但是空值会把数据覆盖,结果如下:
    clime unit
    海南省全省共用 电信
    辽宁 网通 
    海南省全省(代码1234) 电信
      

  6.   

    上面问题解决方法两种如下:
    1、
    select * from [tb2]
    SELECT clime= CASE WHEN CHARINDEX('(',UNIT)>0 THEN CLIME+SUBSTRING(UNIT,CHARINDEX('(',UNIT)+1,len(unit)-charindex('(',unit)-1)
    ELSE clime END,
    unit=CASE WHEN CHARINDEX('(',UNIT)>0  THEN LEFT(UNIT,CHARINDEX('(',UNIT)-1) ELSE unit END  FROM tb2
    2、
    select * from [tb2]
    update tb2 set clime=clime+substring(unit,charindex('(',unit)+1,len(unit)-charindex('(',unit)-1)
            ,unit=case charindex('(',unit) when 0 then unit else left(unit,charindex('(',unit)-1) end 
            where unit is not null 
    select * from [tb2]但是现在表中的数据样式五花八门,如下:
    if object_id('[tb2]') is not null drop table [tb2]
    go
    create table tb2(clime varchar(40) , unit varchar(40))
    insert into tb2 values('海南省', '电信(全省共用)')
    insert into tb2 values('辽宁'  , '网通')
    insert into tb2 values('海南省', '电信(全省(代码1234)共用)abc') 
    insert into tb2 (clime) values('辽宁') 
    insert into tb2 values('辽宁'  , '(网通)')SELECT clime= CASE WHEN CHARINDEX('(',UNIT)>0 THEN CLIME+SUBSTRING(UNIT,CHARINDEX('(',UNIT)+1,RIGHT(UNIT,CHARINDEX(')',UNIT)+1))
    ELSE clime END,
    unit=CASE WHEN CHARINDEX('(',UNIT)>0  THEN LEFT(UNIT,CHARINDEX('(',UNIT)-1) ELSE unit END  FROM tb2

    报错,提示:
    参数数据类型 varchar 对于 substring 函数的参数 3 无效。
    不知道什么原因。