如何通过忽略特殊字符来比较两列?

时间:2020-09-08 19:34:45

标签: regex string postgresql where-clause

我正在比较不同表中的两列以获取匹配的记录。这些表除了名字和姓氏之外没有别的唯一键。但是,如果tableA具有Aa'aa而tableB具有Aaaa,则无法获得正确的输出。有人可以通过忽略特殊字符/任何其他替代方法来使它们匹配来建议如何进行比较吗?

   SELECT * FROM TableA  A where EXISTS
    (SELECT '' FROM TableB B
                WHERE 
                TRIM(A.namef) = TRIM(B.namef)
                AND TRIM(A.namel) = TRIM(B.namel)
    
    )

-谢谢

2 个答案:

答案 0 :(得分:0)

您可以尝试使用正则表达式。假设您只想比较字母和数字字符,则可以执行以下操作:

where 
        regexp_replace(a.namef, '\W', '', 'g') = regexp_replace(b.namef, '\W', '', 'g')
    and regexp_replace(a.namel, '\W', '', 'g') = regexp_replace(b.namel, '\W', '', 'g')

基本上,这会在比较它们之前从每个字符串中删除非单词字符-单词字符定义为字母或数字,再加上下划线字符。

答案 1 :(得分:0)

如果您只想删除字母以外的任何东西,请使用:

regexp_replace(a.namef, '[^A-Za-z]', '', 'g') = regexp_replace(b.namef, '[^A-Za-z]', '', 'g')
相关问题