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

like 模糊查询语句
表A有 中字段 title(标题) ,tags(关键字,多个关键字用,逗号隔开)

现在进行关键字查询 先进行所有的 tags 匹配,如果没有再进行 title匹配,要求 有tags关键字匹配 排在前面,然后再排title匹配的

------解决方案--------------------
order by case when charindex(','+titile+',',','+关键字+',')>0 then 1 else 0 end
------解决方案--------------------
以查找"vbn"为例

SQL code

create table t1 (title varchar(10),tags varchar(20))
insert t1
select 'abc','zxc,vbn,qwer' union all
select 'vbn','tyu,uio,vbn' union all
select 'vbn','tyu,uio,vbn' union all
select 'abc','abc,vbn,tyu' union all
select 'vbn','tyu,uio' union all
select 'vbn',null union all
select null,'vbn'
go

select * from t1
-- where
-- tags like '%vbn%'
-- or
-- title like '%vbn%'
order by 
(case when charindex(','+tags+',',',vbn,')>0 then 0 
      when tags is null then 2
      else 1
      end
)

/*
(所影响的行数为 7 行)
title    tags
-----  -------
NULL    vbn
abc    zxc,vbn,qwer
vbn    tyu,uio,vbn
vbn    tyu,uio,vbn
abc    abc,vbn,tyu
vbn    tyu,uio
vbn    NULL
*/
go
drop table t1