日期:2014-05-18  浏览次数:20975 次

一个查询问题,谢谢!
sqlserver表a的结构和数据如下:

area_id     area
      1           'A,B,C,D '
      2           'A,B,D '
      3           'A,C,D '
      4           'A,D '
      5           'B,C,D '

假如我传入参数@area= 'A,D '
想返回1到4行的数据的查询如何写?

PS:查询条件是字段area中既要有 'A '也要有 'D '存在,因为第5行里面只有 'D '没有 'A '
所以不符合条件

------解决方案--------------------
area like '%A% ' or area like '%D% '

------解决方案--------------------
like 进行模糊查询
------解决方案--------------------
create table test(area_id int,area varchar(20))
insert test select 1, 'A,B,C,D '
union all select 2, 'A,B,D '
union all select 3, 'A,C,D '
union all select 4, 'A,D '
union all select 5, 'B,C,D '

select * from test
where charindex( ',A, ', ', '+area+ ', ')> 0 and charindex( ',D, ', ', '+area+ ', ')> 0
------解决方案--------------------
用函数试试。
------解决方案--------------------
楼上居然可以连续回复5次?

CSDN不是最多连续回复3次 ?
------解决方案--------------------
create table #tmp(area_id int identity(1,1) primary key not null,area varchar(50))
insert #tmp(area) values( 'A,B,C,D ')
insert #tmp(area) values( 'A,B,D ')
insert #tmp(area) values( 'A,C,D ')
insert #tmp(area) values( 'A,D ')
insert #tmp(area) values( 'B,C,D ')
select * from #tmp where area like '%A%D% '
drop table #tmp
返回:
area_id area
----------- --------------------------------------------------
1 A,B,C,D
2 A,B,D
3 A,C,D
4 A,D

(所影响的行数为 4 行)