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