【发布时间】:2013-11-20 20:06:11
【问题描述】:
假设我有一个(代码生成的)查询,它在许多不同的字段中查找关键字。例如,术语University、South 或Africa 中的任何一个可能位于名称字段、地址字段或某个其他字段中。我想查找这些字段中的任何一个与这些关键字中的任何一个匹配的所有记录:
SELECT *
FROM
Institutions
WHERE
Institutions.name LIKE '%University%' OR
Institutions.address LIKE '%University%' OR
Institutions.name LIKE '%South%' OR
Institutions.address LIKE '%South%' OR
Institutions.name LIKE '%Africa%' OR
Institutions.address LIKE '%Africa%'
但是,这将拉起一切。我想按最符合条件的记录进行排序。
我认为这可行,但看起来很笨重:
SELECT *
FROM
Institutions
WHERE
Institutions.name LIKE '%University%' OR
Institutions.address LIKE '%University%' OR
Institutions.name LIKE '%South%' OR
Institutions.address LIKE '%South%' OR
Institutions.name LIKE '%Africa%' OR
Institutions.address LIKE '%Africa%'
ORDER BY
(
CASE WHEN Institutions.name LIKE '%University%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.address LIKE '%University%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.name LIKE '%South%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.address LIKE '%South%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.name LIKE '%Africa%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.address LIKE '%Africa%' THEN 1 ELSE 0 END
) DESC
有更清洁的东西吗?我可以使用特定于 SQL Server 的解决方案,但纯 SQL 解决方案会很棒。
【问题讨论】:
标签: sql sql-server sql-like