【问题标题】:SQL Server Contains searchSQL Server 包含搜索
【发布时间】:2016-09-18 11:42:24
【问题描述】:

我有一个名为Employee 的表,如下所示:

 empid       name              city
-------------------------------------
 1      Dhoni and Virat        Pune
 2      Raina or Rahane        Delhi
 3      John                   CA  
 4      Dhoni                  Chennai
 5      Virat                  Mumbai

我在表中使用包含搜索。当我运行此查询时,我无法以正确的顺序获得确切的结果。

SELECT name 
FROM EMPLOYEE 
WHERE CONTAINS(name,'"Dhoni and Virat"') 
ORDER BY ASC

我按以下顺序获得结果。

Dhoni
Virat
Dhoni and Virat

但我希望这些结果按以下顺序排列

Dhoni and Virat
Dhoni
Virat

有人可以帮忙吗?

【问题讨论】:

  • 您能否向我们展示更多数据,以便清楚您要如何排序?
  • 让我们考虑下面的例子。我想使用以下名称“Micheal and Madhana”进行搜索。当我使用该名称进行搜索时,我希望数据按以下顺序显示。 1.Micheal 和 Madhana * 2. Micheal * 3. Madhana * ....... 这样我希望结果显示出来。但在这里,它以不同的顺序显示如下 1. Micheal * 2.Madhana * 3.Micheal 和 Madhana*.....

标签: sql-server contains


【解决方案1】:

ORDER BY empid ASC 将按照您要求的顺序给出结果

SELECT name 
FROM EMPLOYEE 
WHERE CONTAINS(name,'"Dhoni and Virat"') 
ORDER BY empid ASC

【讨论】:

  • 感谢您的回复。我尝试按名称 asc 排序。但它以不同的顺序返回结果。它没有以正确的顺序返回。当我运行上述查询时,它正在使用和执行的每个单词都包含搜索。它没有完整地表达。
【解决方案2】:

你可以用“喜欢”代替

SELECT name
FROM `employee`
WHERE `name` LIKE '%Dhoni%' or `name` LIKE '%Virat%'

【讨论】:

  • 感谢您的回复。我知道,我们可以使用like 操作。但是我选择 contains 的原因是,在性能方面,它比类似操作更快。
【解决方案3】:

你试过CONTAINSTABLE吗?

SELECT e.name 
FROM EMPLOYEE e
INNER JOIN CONTAINSTABLE(EMPLOYEE, name,'"Dhoni" or "Virat"') as con 
    ON e.empid = con.[KEY]
ORDER BY con.RANK DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多