当前位置: 代码迷 >> Sql Server >> 字符包含字符有关问题
  详细解决方案

字符包含字符有关问题

热度:78   发布时间:2016-04-24 10:22:03.0
字符包含字符问题
我有两个表
表一
商家
嘉兴市金茂家电有限公司                    
台州市路桥汇通电器有限公司
浙江风行电器有限公司
慈溪市甬菱电器有限公司
浙江杭州淳安县美大电器
泰州市海陵区海长电器经营部(长海)
徐州市天循电器设备有限公司(超军)
江苏省常熟市日用杂品果品总公司交家电公司
盐城大丰市大中天长电器经营部
盐城市海迪贸易有限公司
吴江市荣智家电有限公司
表二 
商家                   回款
嘉兴金茂        222
台州路通       333
。。。。      ,,,
大丰天长       。。。
就是表一的简称,请教如何将表二的回款和表一对应起来,别说一个个填,,有好几千家

------解决方案--------------------
给你弄个函数吧,供参考
create function dbo.f_string (@string1 varchar(20),@string2 varchar(50))
  returns int as
 begin
   declare @result int
   declare @s varchar(10)
    while @string1<>''
      begin
        set @s=SUBSTRING(@string1,1,1)
         if CHARINDEX(@s,@string2)>0
           begin
             set @result=1
           end
         else
           begin
             set @result=0
           end
        set @string1=STUFF(@string1,1,1,'')
      end
   return @result
 end

 select dbo.f_string('格力','珠海格力电器')   结果为1
select dbo.f_string('格力的','珠海格力电器')   结果为0
如果要更复杂的判断,自己去改函数

------解决方案--------------------

if object_id('tempdb..#a','U') is not null
drop table #a
if object_id('tempdb..#b','U') is not null
drop table #b 
go
create table #a (company varchar(200))
create table #b (companySimple varchar(50),payAccount int)
go
insert into #a (company)
values( '嘉兴市金茂家电有限公司'),                    
( '台州市路桥汇通电器有限公司'),    
 ( '浙江风行电器有限公司'),    
 ( '慈溪市甬菱电器有限公司'),    
 ( '浙江杭州淳安县美大电器'),    
 ( '泰州市海陵区海长电器经营部(长海)'),    
 ( '徐州市天循电器设备有限公司(超军)'),    
 ( '江苏省常熟市日用杂品果品总公司交家电公司'),    
 ( '盐城大丰市大中天长电器经营部'),    
 ( '盐城市海迪贸易有限公司'),    
 ( '吴江市荣智家电有限公司'); 

 insert into #b (companysimple,payAccount)
 values( '嘉兴金茂',        222),
('台州路通',        333);
/******************************************************************************
**根据#b名称,可以发现
**简称是由[市名]+[公司名简称]组成
**建议博主改下设计思路
**解决语句,仅就问题解决而写
*******************************************************************************/
select a.company from #a as a inner join #b as b on a.company like '%'+left(b.companysimple,2)+'%' and a.company like '%'+right(b.companysimple,2)+'%'
--结果展示 由于没有台州路通,因此结果集为一
/*
company                    companySimple                                      payAccount
-------------------------- -------------------------------------------------- -----------
嘉兴市金茂家电有限公司     嘉兴金茂                                           222

(1 行受影响)
*/

  相关解决方案