本帖最后由 abc1_a 于 2014-03-26 13:30:21 编辑

解决方案 »

  1.   

    创建函数CREATE function [dbo].[f_get_hz](@str nvarchar(4000))  
      returns nvarchar(4000)  
     as  
     begin  
      declare @word nchar(1),@hz nvarchar(4000)  
      set @hz=''  
      while len(@str)>0  
      begin  
      set @word=left(@str,1)  
      --如果非汉字字符,返回'' 
      set @HZ=@HZ+(case when unicode(@word) between 19968 and 19968+20901  
        then @word else '' end)  
      set @str=right(@str,len(@str)-1)  
      end  
      return @HZ  
     end测试
    with t as 
    (select '重庆唯远实业有限公司a' NAME
    union all 
    select '江苏苏美达船舶工程有限公司#2主'
    union all 
    select '(上海)启门机电有限公司b'
    union all 
    select '(Q)小洋人生物乳业集团有限公司'
    union all 
    select '沈阳鼎冷机电设备有限公司(中国)'
    union all 
    select '嘉柏(中国)国际货运代理有限公司'
    union all 
    select '广州宝洁(B)有限公司'
    union all 
    select '烟台华科食品有限公司c'
     union all 
    select 'd艾来得机械(上海)有限公司'
    union all 
    select '(次)(上海)晓舟船舶配件有限公司#1重')
    SELECT dbo.f_get_hz(REPLACE(NAME,SUBSTRING(NAME,CHARINDEX('(',NAME),CHARINDEX(')',NAME)),'')) NAME FROM
    (SELECT REPLACE(NAME,SUBSTRING(NAME,CHARINDEX('(',NAME),CHARINDEX(')',NAME)),'') NAME FROM T) ANAME
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    重庆唯远实业有限公司 
    江苏苏美达船舶工程有限公司  主
    启门机电有限公司 
    小洋人生物乳业集团有限公司
    沈阳鼎冷机电设备有限公司
    嘉柏货运代理有限公司
    广州宝洁
    烟台华科食品有限公司 
     艾来得机械
    晓舟船舶配件有限公司  重(10 行受影响)
      

  2.   

    步骤1:建个函数:
    create function [dbo].[m_getchinese]
    (
        @chinese nvarchar(max)
    )
    returns nvarchar(100)
    as
    begin
        while patindex('%[^吖-咗]%',@chinese) > 0
        begin
           set @chinese = stuff(@chinese,patindex('%[^吖-咗]%',@chinese),1,N'');
        end
        return @chinese
    end
    go
    步骤2:执行下面的语句,把表名、列名替换成你的数据库中对应的:
    select [dbo].[m_getchinese](REPLACE(SUBSTRING(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)),0,PATINDEX('%(%',SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name))))+SUBSTRING(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))),PATINDEX('%)%',SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))+1,LEN(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))),'#',''))
    from [HUANG]
      

  3.   

    额,有空格,自己在函数里用replace去掉空格
      

  4.   


    我要是把这一列更新到同一个表的另一列中  就是 update tb set  列2 = ?
      

  5.   

    update tb set  列2 =上面select的那串东西
      

  6.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2014-03-26 14:00:59
    -- Verstion:
    --      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    -- Jul  9 2008 14:43:34 
    -- Copyright (c) 1988-2008 Microsoft Corporation
    -- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([col] varchar(34))
    insert [tb]
    select '重庆唯远实业有限公司a' union all
    select '江苏苏美达船舶工程有限公司#2主' union all
    select '(上海)启门机电有限公司b' union all
    select '(Q)小洋人生物乳业集团有限公司' union all
    select '沈阳鼎冷机电设备有限公司(中国)' union all
    select '嘉柏(中国)国际货运代理有限公司' union all
    select '广州宝洁(B)有限公司' union all
    select '烟台华科食品有限公司c' union all
    select 'd艾来得机械(上海)有限公司' union all
    select '(次)(上海)晓舟船舶配件有限公司#1重'
    --------------开始查询--------------------------
    IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
    DROP FUNCTION DBO.CHINA_STR
    GO
    CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
    RETURNS VARCHAR(100)
    AS
    BEGIN
    WHILE CHARINDEX('(',@s)>0 OR CHARINDEX(')',@s)>0
    SET @s=REPLACE(@s,SUBSTRING(@s,CHARINDEX('(',@s),CHARINDEX(')',@s)-CHARINDEX('(',@s)+1),'')
    WHILE PATINDEX('%[^吖-做]%',@S) > 0 
    SET @S = STUFF(@S,PATINDEX('%[^吖-做]%',@S),1,N'')
    RETURN @S
    END
    GO
    SELECT  DBO.CHINA_STR(col) FROM tb 
    GO
    ----------------结果----------------------------
    /* 重庆唯远实业有限公司
    江苏苏美达船舶工程有限公司主
    启门机电有限公司
    小洋人生物乳业集团有限公司
    沈阳鼎冷机电设备有限公司
    嘉柏国际货运代理有限公司
    广州宝洁有限公司
    烟台华科食品有限公司
    艾来得机械有限公司
    晓舟船舶配件有限公司重*/
      

  7.   


    select 出来的数据有很多条,不能用 = 
      

  8.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2014-03-26 14:00:59
    -- Verstion:
    --      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    -- Jul  9 2008 14:43:34 
    -- Copyright (c) 1988-2008 Microsoft Corporation
    -- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([col] varchar(34))
    insert [tb]
    select '重庆唯远实业有限公司a' union all
    select '江苏苏美达船舶工程有限公司#2主' union all
    select '(上海)启门机电有限公司b' union all
    select '(Q)小洋人生物乳业集团有限公司' union all
    select '沈阳鼎冷机电设备有限公司(中国)' union all
    select '嘉柏(中国)国际货运代理有限公司' union all
    select '广州宝洁(B)有限公司' union all
    select '烟台华科食品有限公司c' union all
    select 'd艾来得机械(上海)有限公司' union all
    select '(次)(上海)晓舟船舶配件有限公司#1重'
    --------------开始查询--------------------------
    IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
    DROP FUNCTION DBO.CHINA_STR
    GO
    CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
    RETURNS VARCHAR(100)
    AS
    BEGIN
    WHILE CHARINDEX('(',@s)>0 OR CHARINDEX(')',@s)>0 OR CHARINDEX('#',@s)>0
    SET @s=REPLACE(REPLACE(@s,SUBSTRING(@s,CHARINDEX('(',@s),CHARINDEX(')',@s)-CHARINDEX('(',@s)+1),''),SUBSTRING(@s,CHARINDEX('#',@s),LEN(@s)-CHARINDEX('#',@s)+1),'')
    WHILE PATINDEX('%[^吖-做]%',@S) > 0 
    SET @S = STUFF(@S,PATINDEX('%[^吖-做]%',@S),1,N'')
    RETURN @S
    END
    GO
    SELECT  DBO.CHINA_STR(col) FROM tb 
    GO
    ----------------结果----------------------------
    /*重庆唯远实业有限公司
    江苏苏美达船舶工程有限公司
    启门机电有限公司
    小洋人生物乳业集团有限公司
    沈阳鼎冷机电设备有限公司
    嘉柏国际货运代理有限公司
    广州宝洁有限公司
    烟台华科食品有限公司
    艾来得机械有限公司
    晓舟船舶配件有限公司
    */
      

  9.   

    接F姐的代码:
    update tb
    set 列2=DBO.CHINA_STR(col)