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

r1wp621o  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(2)|浏览(177)

我正在比较不同表中的两列,以获得匹配的记录。这些表除了名字和姓氏之外没有任何唯一键。但是如果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)
    )
68bkxrlz

68bkxrlz1#

如果您只想删除任何非字母的内容,请用途:

regexp_replace(a.namef, '[^A-Za-z]', '', 'g') = regexp_replace(b.namef, '[^A-Za-z]', '', 'g')
jljoyd4f

jljoyd4f2#

您可以尝试正则表达式方法。假设您只想比较字母和数字字符,您可以这样做:

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')

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

相关问题