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

请问这样的SQL语句要如何写, 两个or的优先问题
一个表中,对一个   nvarchar字段进行模糊查询,例如

select   *   from   table   where   longstring   like   '%aa% '   or   name   like   '%ab% '

请问如何让符合 "aa "的结果在最前面然后让符合 "ab "的结果在后面啊??   现在这个语句查询的结果是符合2个条件的结果都混合一起出现了,即使我order   by   longstring   也没有任何变化,请各位帮助,谢谢

------解决方案--------------------
select
*
from
table
where
longstring like '%aa% ' or name like '%ab% '
order by
(case when charindex( 'aa ',longstring)> 0 then 1 else 2 end)
------解决方案--------------------
select * from table where longstring like '%aa% ' or name like '%ab% '
Order by case when Charindex( 'aa ',longstring)> 0 then 0 else 1 end
------解决方案--------------------

declare @a table(name varchar(20))
insert @a
select 'aaabbb '
union all
select 'aaaaaa '
union all
select 'aabaaa '

select * from @a where charindex( 'aa ',name)> 0 or charindex( 'ab ',name)> 0

/*

(所影响的行数为 3 行)

name
--------------------
aaabbb
aaaaaa
aabaaa

(所影响的行数为 3 行)
*/
------解决方案--------------------
一个表中,对一个 nvarchar字段进行模糊查询,例如

select * from table where longstring like '%aa% ' or name like '%ab% '

请问如何让符合 "aa "的结果在最前面然后让符合 "ab "的结果在后面啊?? 现在这个语句查询的结果是符合2个条件的结果都混合一起出现了,即使我order by longstring 也没有任何变化,请各位帮助,谢谢

select * from table where longstring like '%aa% '
union
select * from table where longstring like '%ab% '

------解决方案--------------------
select * from table where longstring like '%aa% ' or name like '%ab% '
order by (case charindex( 'aa ',longstring)> 0 then 1 else 2 end)