t sql записей, которые содержат часть другой записи - PullRequest
0 голосов
/ 28 мая 2020

Использование SQL Server 2014. Есть ли способ выбрать записи, в которых строковое значение частично существует в другом поле?

например:

RowID   Field1     Field2
1       ABC        ABC DEF
2       XYZ        WERQ
3       MNB        MNB RTW

Из вышесказанного я бы нужны строки 1 и 3, так как у них есть совпадающие AB C и MNB.

SELECT RowID FROM MY TABLE
WHERE CONTAINS(Field1, Field2);

Я пробовал вышеуказанное, однако это не работает, поскольку вы не можете указать имя 2-го поля в функции CONTAINS .

Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вы можете использовать like:

select t.*
from t
where field2 like concat('%', field1, '%')

Если вы хотите, чтобы соответствовали только полные «слова» - что ж, вам следует исправить свою модель данных. Вы не должны хранить списки вещей в строке. Но при необходимости можно использовать разделители:

select t.*
from t
where concat(' ', field2, ' ') like concat('% ', field1, ' %')
0 голосов
/ 28 мая 2020

Думаю, вы ищете

SELECT *
FROM
(
  VALUES
  (1,       'ABC',        'ABC DEF'),
  (2,       'XYZ',        'WERQ'),
  (3,       'MNB',        'MNB RTW'),
  -- for col2 like col1
  (4,       'HI MNB RTW S',        'MNB RTW')
) T(Id, Col1, Col2)
WHERE  CONCAT(' ', Col1, ' ') LIKE CONCAT('% ', Col2, ' %') 
       OR
       CONCAT(' ', Col2, ' ') LIKE CONCAT('% ', Col1, ' %');
...