如何将两个表中的相同字符串配对,其中一个表中有一个“?”替换一些角色?

问题描述 投票:0回答:1

我在一个表中将人名作为主键,在另一个表中将其作为外键,除了在第二个表中,他们偶尔会被错误地记录,并带有“?”符号替换字符。我希望最终用正确的名称更新第二个表,但现在我只想选择与相应正确名称配对的错误名称列表。我想出了替换每个“?”的想法名称中包含一个“_”字符,希望它能够充当通配符,标记恰好一个缺失字符的位置,这样我就可以通过 LIKE 语句连接两个表。然而,当我运行下面的 SQL 查询时,我返回了零行(尽管我知道应该有很多行):

SELECT
    T1.Name,
    T2.Name
FROM
    table1 T1
INNER JOIN
    table2 T2
ON
    T1.Name LIKE REPLACE(T2.Name, '?', '_')
WHERE
    T2.NAME REGEXP '[?]';

我怀疑它将“_”符号视为字符串的一部分而不是通配符?如果是这样的话,我该怎么写才能得到正确的结果?

sql string replace wildcard
1个回答
0
投票

您应该将类似的百分比放在值之外,就像这样

select t1.Name as Name1,
       t2.Name as Name2
from   table1 t1
  left join table2 t2 on t1.Name like '%' + replace(t2.Name, '?', '_') + '%'

另请参阅这个 dbFiddle

© www.soinside.com 2019 - 2024. All rights reserved.