t sql 条记录包含另一条记录的一部分

t sql records that contain part of another record

使用 SQL Server 2014。有没有办法 select 字符串值部分存在于另一个字段中的记录?

例如:

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

根据以上内容,我想要第 1 行和第 3 行,因为它们具有匹配的 ABC 和 MNB。

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

我试过上面的方法,但是,这不起作用,因为您不能在 CONTAINS 函数中指定第二个字段名称。

我错过了什么?

您可以使用 like:

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

如果您只想要完整的 "words" 匹配 - 那么,您应该修正您的数据模型。您不应该将事物列表存储在字符串中。但是,如果必须,您可以使用定界符:

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

我想你正在寻找

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, ' %');