1

我正在分析两列以过滤看起来不相似的记录:

select firstname, name 
from tableA
where lower(firstname) != lower(name)

即使少数特殊字符不匹配,我也接受匹配的名称,例如:

在此处输入图像描述

Databricks 的这两个名称被认为是不同的(正确的),但我想逃避那个“-”字符。有没有办法说'寻找不同的名字而不考虑'-'字符'?或者也许是一种获取两个字符串不同程度的索引的方法。

4

1 回答 1

1

有几种方法:

  • 在比较之前对字符串进行规范化 - 小写或大写字符串,-用单个空格替换所有字符,如 , 多个空格等 - 你可以使用regexp_replace 函数。像这样的东西:
select firstname, name 
from tableA
where 
  regex_replace(lower(firstname), '[- ]+', ' ') != 
    regex_replace(lower(name), '[- ]+', ' ')

可以通过为该规范化创建用户定义的 SQL 函数来进一步简化它。

select firstname, name 
from tableA
where levenstein(lower(firstname), lower(name)) != 0
于 2021-12-21T11:48:43.760 回答