如何在SQL Server中将LIKE转换为CONTAINS?

时间:2019-06-16 21:06:29

标签: sql sql-server sql-like

我有一个使用“ LIKE”的查询,我需要将其更改为使用“ contains”。 我的问题是,使用“ contains”子句得到的结果更少,如何获得与LIKE相同的结果?

这是带有“ LIKE”的查询:

  WHERE (
  (((((ProductCode=3748710)) OR ((((ManufacturerSkuNoSpaces LIKE 
       '1703959%')) OR ((JoinedColumnInfo LIKE '%1703959%')))))))
  )

这是包含以下内容的“相同”查询:

  CONTAINS (JoinedColumnInfo,  '"usb*" OR "*usb" OR "usb"' ) 
  OR CONTAINS(ManufacturerSkuNoSpaces, '"usb*" OR "*usb" OR "usb"' )

我希望“ CONTAINS”的结果与通过“ LIKE”获得的结果相同,但是得到的结果会更少。

编辑 这是我得到的结果的示例:

CONTAINS查询:

   SELECT JoinedColumnInfo FROM [dbo].[ImportedData]
   WHERE CategoryId = 11131700
   AND  CONTAINS  (JoinedColumnInfo,   ' "usb*" ')

这是结果:(2结果)

1.F5TYEU 2815124 KOSS cs100usb双面通信耳机USB,有线降噪麦克风

2.NUYVSRB 79X3419cs100usb KOSS双面通讯耳机USB,降噪麦克风

///////////////////////////////////////////////// ///////////////////////////////

这是LIKE查询:

  SELECT JoinedColumnInfo FROM [dbo].[ImportedData]
  WHERE CategoryId = 11131700
  AND  JoinedColumnInfo LIKE  '%usb%'

这是结果:(3结果)

1.F5TYEU 2815124 KOSS cs100usb双面通信耳机USB,有线降噪麦克风

2.PODCASTUDIOUSB BEHRINGER Studio PodCast套件-包括麦克风,混音器和耳机

3.NUYVSRB 79X3419cs100usb KOSS双面通信耳机USB,降噪麦克风

CONTAINS查询中缺少2个结果,

我该如何解决?

我使用'CONTAINS'是因为它比'LIKE'要快得多。

如果无法以与“ LIKE”相同的方式使用“ CONTAINS”,如何获得上面的“ LIKE”查询最快的结果?

1 个答案:

答案 0 :(得分:0)

LIKE和CONTAINS的工作方式存在一些根本差异,最重要的是,在使用CONTAINS时,您需要在列上使用现有的全文索引。

来自here

  

CONTAINS可以搜索:

     
      
  • 一个单词或短语。
  •   
  • 单词或短语的前缀。
  •   
  • 一个词在另一个词附近。
  •   
  • 从另一个词衍生而来的词(例如,单词drive是驱动,驱动,驱动和从动的词干)。
  •   
  • 与同义词库中另一个单词的同义词相同的单词(例如,单词“ metal”可以具有同义词,例如“ aluminum”和   “钢”)。
  •   

另一方面,LIKE使用模式匹配来查找简单的字符串匹配来查找您要查找的值。