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