Есть ли другой стиль для написания LIKE запросов? - PullRequest
1 голос
/ 23 сентября 2011

Я пишу несколько запросов, таких как:

SELECT *
FROM Sample.dbo.Temp
WHERE
   Name LIKE '%ab%'
OR Name LIKE '%fg%'
OR NAME LIKE '%asd%'
OR ...
OR ...
OR Name LIKE '%kj%'

Есть ли в любом случае, я могу переписать этот запрос так:

SELECT *
FROM Sample.dbo.Temp
WHERE
   Name LIKE (
             '%ab%'  
          OR '%fg%'
          OR '%asd%'
          OR ...
          OR ...
          OR '%kj%'
              )

Просто выглядит удобнее как с точки зрения читабельностии управляемость.Если столбец Name изменяется, я всегда могу сделать одно изменение вместо ста (или использовать Find and Replace).Есть предложения?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Вы можете поместить значения в таблицу, например, CTE , и полусоединиться с вашей таблицей, например.

WITH params 
     AS 
     (
      SELECT * 
        FROM (
              VALUES ('at'),
                     ('fg'),
                     ('asd'),
                     ('kj')
             ) AS T (param)
     )
SELECT *
  FROM Sample.dbo.Temp T
 WHERE EXISTS (
               SELECT *
                 FROM params P
                WHERE T.Name LIKE '%' + P.param + '%'
              );

Это выглядит многословно, но если бы CTE был вместо этого базовой таблицей, то запрос мог бы быть управляемым данными, то есть если список значений параметров должен измениться в будущем, то это потребовало бы простого обновления таблицы, а не внесения исправлений закодированные значения (возможно, в нескольких объектах).

2 голосов
/ 23 сентября 2011

Нет, вы должны продолжать повторять LIKE

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

Возможно, вам следует сгенерировать запрос программно, а не писать это вручную?

PS: возможно, полнотекстовый индекс - лучшая идея здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...