【问题标题】:CONTAINS match on CONCAT?CONCAT 是否包含匹配项?
【发布时间】:2021-07-11 18:03:37
【问题描述】:

对不起,如果这看起来很漫无边际,我通常不是一个试图解决问题的数据库人员。

我有两张表caseslegal_entity这两张表上的数据是这样的

legal_entity

first_name last_name address_1_zip
Maria Munoz 33122
John Glenn 10003
Melissa Johnson 90210

cases

style case_number create_date
Munoz, Maria SL12345 2021-03-01 11:45:26.657
Glenn, John SL45678 2021-03-02 12:10:14.552
Johnson, Melissa (DNY) SG42561 2021-04-10 01:06:10.214

我要做的是将legal_entity 表中的last_namefirst_name 字段与它们之间的逗号组合,并将其与cases 表中的style 字段匹配(包含) .基本上上个月的一切。这是我正在使用的查询

SELECT
    C.[case_number]     AS CaseNumber,
    C.[style]           AS FullName,
    LE.[first_name]     AS FirstName,
    LE.[last_name]      AS LastName,
    LE.[address_1_zip]  AS ZipCode,
    CONCAT_WS(',', last_name,first_name) AS CombinedName
FROM
    CPSQL.dbo.legal_entity AS LE
INNER JOIN CPSQL.dbo.cases as C ON CONCAT_WS(', ', LE.last_name,LE.first_name) LIKE C.style
WHERE C.create_date >= Convert(datetime, '2021-03-01') AND C.create_date <= Convert(datetime, '2021-04-16')
ORDER BY C.create_date

我遇到的问题是,C.style 包含的信息不仅仅是 LastName,FirstName

(例如Johnson, Melissa (DNY)

即使您将 = 更改为 LIKE,它也不匹配/加入。

任何帮助将不胜感激。

编辑

完整的工作查询

SELECT
    C.[case_number]     AS CaseNumber,
    C.[style]           AS FullName,
    LE.[first_name]     AS FirstName,
    LE.[last_name]      AS LastName,
    LE.[address_1_zip]  AS ZipCode,
    CONCAT(LE.last_name,', ',LE.first_name, '%') AS CombinedName
FROM CPSQL.dbo.legal_entity AS LE
JOIN CPSQL.dbo.cases as C ON 
           C.style LIKE CONCAT(LE.last_name,', ',LE.first_name, '%')
WHERE C.create_date >= Convert(datetime, '2021-03-01') AND C.create_date <= Convert(datetime, '2021-04-16')
ORDER BY C.create_date

【问题讨论】:

  • sql server 2017 中引入的CONCAT_WS,为什么要标记2016?

标签: sql sql-server join concatenation


【解决方案1】:

您可以添加通配符:

FROM CPSQL.dbo.legal_entity AS LE
JOIN CPSQL.dbo.cases as C ON 
           C.style LIKE CONCAT(CONCAT_WS(', ', LE.last_name,LE.first_name), '%')

FROM CPSQL.dbo.legal_entity AS LE
JOIN CPSQL.dbo.cases as C ON 
           C.style LIKE CONCAT(LE.last_name,', ',LE.first_name, '%')

【讨论】:

  • 这不会出错,但我在 5 分钟内进行查询,但仍未完成(没有通配符大约需要 2 秒。)这里有问题还是通配符搜索没有链接这两个表的方法是什么?
  • @Cistoran 我猜这是因为它不再是“equi”连接并附加了 2 个函数。让我们试着简化一下
  • 那个简化版可以完美运行。使用工作查询完整编辑了 OP。非常感谢!
【解决方案2】:

您已经在使用运算符LIKE,但没有任何通配符,它​​等效于=
使用通配符:

ON C.style LIKE CONCAT_WS(', ', LE.last_name, LE.first_name) + '%'

【讨论】:

    【解决方案3】:

    您可以尝试使用 LEN 使用附加条件语句

    LEN(CONCAT_WS(',', last_name,first_name)) = LEN(C.style)
    

    【讨论】:

    • LEN() 返回一个永远不会等于 C.style 的 INT
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2020-01-08
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多