【问题标题】:t sql records that contain part of another recordt 包含另一条记录的一部分的 sql 记录
【发布时间】:2020-09-15 21:03:38
【问题描述】:

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

例如:

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 函数中指定第二个字段名称。

我错过了什么?

【问题讨论】:

    标签: sql sql-server tsql sql-like contains


    【解决方案1】:

    你可以使用like:

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

    如果您只想匹配完整的“单词”——那么,您应该修复您的数据模型。您不应该将事物列表存储在字符串中。但是,如果必须,您可以使用分隔符:

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

    【讨论】:

      【解决方案2】:

      我想你正在寻找

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-10
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-30
        相关资源
        最近更新 更多