如何使SQL搜索查询更强大?

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)

该表包含这些行,例如:

  1. 航天公司.
  2. 温泉度假村.
  3. 温泉酒店.
  4. 备件.
  5. WithoutTheKeyword.

我想知道如何编辑此查询,以便返回如下排序结果:

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上测试过.


dkr*_*etz 5

我认为,您认为您的架构只是消除了对这些类型的查询的索引的任何有用性?

一个很大的问题是你的"LIKE'%spa%'".任何以通配符开头的"LIKE"键都是自动表扫描.


编辑:我读了你的问题,说有一个字段名称,字段值类似于"1 Space Company","2 Spa resort"等,后面跟着一个单词.而且你需要在搜索键前面使用通配符才能超过数字部分.(这是为了澄清我的第一个评论.)我猜对了吗?