【问题标题】:How to compare two columns by ignoring special charactes?如何通过忽略特殊字符来比较两列?
【发布时间】:2020-09-08 19:34:45
【问题描述】:

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

-谢谢

【问题讨论】:

    标签: regex string postgresql where-clause


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      如果您只想删除任何不是字母的内容,请使用:

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

      【讨论】:

      • 感谢您的宝贵时间和回复。但这完全忽略了所有不是字母的东西。但我可以将其用于其他目的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      相关资源
      最近更新 更多