【Transact-SQL】T-SQL中的Like

先进行一下简单的说明:

表tblb的address字段可能是包含了表tbla的address字段的内容,如果确实是包含了,那么返回tbla中的项目名称。


以前用游标来实现的功能,大概要写个几十行,现在用Like来实现,只要一句SQL就行了,感觉方便多了。

不过没有在大数据量的情况之下进行测试。


代码如下:

 

--先建立2个表格
create table tbla (ename varchar(50) ,address varchar(50))
create table tblb (address varchar(50))


insert into tbla values('金顺小区','金顺里x号')
insert into tbla values('华小园','华小园xx号院')
insert into tbla values('通天院项目','通天苑x号楼')


insert into tblb values('南开华小园xx号院')
insert into tblb values('华山通天苑x号楼1111')
insert into tblb values('东城区金顺里x号100')
go

--drop table tbla
--drop table tblb

 

 

 

--通过派生表来实现,派生表只能在本语句中使用
select * 
from
(
	select case when b.address like '%'+a.address+'%' 
					 then a.address
				else NULL 
		   end as simple_address,
	       
		   a.ename as building,
		   b.address as more_address
	from tbla a 
	cross join tblb b
) derive 
where simple_address is not null

/*

simple_address    building         more_address
金顺里x号           金顺小区          东城区金顺里x号100
华小园xx号院        华小园            南开华小园xx号院
通天苑x号楼         通天院项目        华山通天苑x号楼1111
*/

 

 

在SQL Server 2005中可以通过通用表表达式CTE来实现,代码如下:

 

--通过CTE来实现,在批处理级别使用
with derive(building,simple_address,more_address)
as
(select a.ename as building,

        case when b.address like '%'+a.address+'%' 
                  then a.address
             else NULL 
        end as simple_address,
             
        b.address as more_address
from tbla a 
cross join tblb b
)

select * from derive 
where simple_address is not null

 

转载于:https://www.cnblogs.com/momogua/archive/2011/08/05/8304652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值