日期:2014-05-16  浏览次数:20459 次

大神,你说你会这个SQL语句的
本帖最后由 abc1_a 于 2014-03-26 13:30:21 编辑
大神,你说你会的,让小弟以后跟你混了,以后遇到问题直接  一直穿云箭,千军万马来相见


接题吧:

数据库中已有数据:

重庆唯远实业有限公司a
江苏苏美达船舶工程有限公司#2主
(上海)启门机电有限公司b
(Q)小洋人生物乳业集团有限公司
沈阳鼎冷机电设备有限公司(中国)
嘉柏(中国)国际货运代理有限公司
广州宝洁(B)有限公司
烟台华科食品有限公司c
d艾来得机械(上海)有限公司
(次)(上海)晓舟船舶配件有限公司#1重


结果:

重庆唯远实业有限公司
江苏苏美达船舶工程有限公司
上海启门机电有限公司
小洋人生物乳业集团有限公司
沈阳鼎冷机电设备有限公司
嘉柏国际货运代理有限公司
广州宝洁有限公司
烟台华科食品有限公司
艾来得机械有限公司
上海晓舟船舶配件有限公司


意思就是:

删除 括号及括号里面内容,删除#号及#号后内容,删除字母。

求SQL语句

------解决方案--------------------
创建函数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) A

NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
重庆唯远实业有限公司 
江苏苏美达船舶工程有限公司  主
启门机电有限公司 
小洋人生物乳业集团有限公司
沈阳鼎冷机电设备有限公司
嘉柏货运代理有限公司
广州宝洁
烟台华科食品有限公司 
 艾来得机械
晓舟船舶配件有限公司  重

(10 行受影响)
------解决方案--------------------
步骤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('%(%',SUBSTRIN