Как преобразовать LIKE в CONTAINS в SQL Server? - PullRequest
0 голосов
/ 17 июня 2019

У меня есть запрос, который использует «LIKE», и мне нужно изменить его, чтобы использовать «содержит».Моя проблема в том, что я получаю меньше результатов с предложением «содержит», как я могу получить те же результаты, что и 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"' )

Я ожидаю, что результат «СОДЕРЖИТ» будет таким же, как я получаю по «НРАВИТСЯ», но я получаю меньше результатов.

РЕДАКТИРОВАТЬ вот пример результатов, которые я получаю:

запрос СОДЕРЖИТ:

   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 Kit - Включает микрофон, микшери наушники

3.NUYVSRB 79X3419cs100usb KOSS Двухсторонняя гарнитура USB, микрофон с шумоподавлением

2 результата в запросе CONTAINS отсутствует,

как это исправить?

Я использую «СОДЕРЖИТ», потому что этоt быстрее, чем «LIKE».

Если невозможно использовать «CONTAINS» таким же образом, как «LIKE», как я могу получить самые быстрые результаты для указанного выше запроса «LIKE»?

1 Ответ

0 голосов
/ 17 июня 2019

Существуют некоторые принципиальные различия в работе LIKE и CONTAINS, наиболее важным является то, что вам необходим существующий полнотекстовый индекс для столбца при использовании CONTAINS.

С здесь :

СОДЕРЖИТ может искать:

  • Слово или фразу.
  • Префикс слова или фразы.
  • Словорядом с другим словом.
  • Слово, порождённое из другого слова (например, слово «диск» - это инфлективное основание «приводы, движение, движение и движение»).
  • Слово, являющееся синонимомдругого слова, использующего тезаурус (например, слово «металл» может иметь синонимы, такие как «алюминий» и «сталь»).

LIKE, с другой стороны, использует сопоставление снайти простое совпадение строк, чтобы найти искомое значение.

...