2011-08-26 72 views
0

搜索我有一个varchar列3行:短语在SQL Server 2008(T-SQL)

i eat orange, 
orange, 
oranges are nice 

我想SELECT查询顺序返回结果:

orange, oranges are nice, i eat orange 

即那些'keyword'=orange开始比赛应该来那些包含关键字这又应该来之前那些之前结束与关键字。

我怎样才能做到这一点使用T-SQL?我尝试使用LIKE关键字,但目前为止没有成功。

+1

阅读了关于全文索引。你可以用like(见下面)做到这一点,但这不是一个好主意。 –

回答

2
WHERE column LIKE '%' + keyword + '%' 
ORDER BY CASE WHEN column = keyword THEN 0 
       WHEN column LIKE keyword + '%' THEN 1 
       WHEN column LIKE '%' + keyword + '%' THEN 2 END 

但是的确,对于这种类型的搜索,您希望使用全文索引。

+0

我喜欢你的解决方案,它是更精确一点,但我认为你需要添加一个条件(即列LIKE“%” +关键字THEN 3),以获得与关键字结束串推到后面.. – Sparky

+0

@Sparky - 尽管如此,我只能分为三块(或四块)。你的排名将按照第一次出现的顺序排列。 –

+0

确实如此,但如果最后一次出现的关键字出现在比另一个匹配字符串短得多的字符串中,我的行为将不起作用。也许,如果我们结合您的情况陈述,我的订单,我们可以得到一些作品(或者我们可以说服他使用全文索引) – Sparky

2

by子句试试下面的命令(假设你的WHERE子句仅返回匹配)

ORDER BY charIndex(keyword,col_name),length(col_name) 

这会先将关键字最早发生。