Amr*_*rhy 7 mysql sql t-sql sql-server sql-server-2005
我写了这个SQL查询来搜索表:
SELECT * FROM TableName WHERE Name LIKE '%spa%'
Run Code Online (Sandbox Code Playgroud)
该表包含这些行,例如:
我想知道如何编辑此查询,以便返回如下排序结果:
2个温泉度假村
3间Spa酒店
1空间公司
4备件
表示首先包含确切单词然后包含相同单词的项目.
Boo*_*Boy 10
就像是
Select * from TableName where Name Like 'Spa%'
ORDER BY case when soundex(name) = soundex('Spa') then '1' else soundex(name) end
Run Code Online (Sandbox Code Playgroud)
应该工作正常.
实际上这会更好
Select * from TableName where Name Like 'Spa%'
ORDER BY DIFFERENCE(name, 'Spa') desc;
Run Code Online (Sandbox Code Playgroud)
FWIW我做了一些快速测试,如果'Name'在NONCLUSTERED INDEX中SQL将使用索引而不进行表扫描.此外,LIKE似乎比charindex使用更少的资源(返回不太理想的结果).在sql 2000上测试过.
我认为,您认为您的架构只是消除了对这些类型的查询的索引的任何有用性?
一个很大的问题是你的"LIKE'%spa%'".任何以通配符开头的"LIKE"键都是自动表扫描.