Databricks sql,如何比较字符串转义字符
Databricks sql, how to compare string escaping characters
我正在分析两列以过滤看起来不相似的记录:
select firstname, name
from tableA
where lower(firstname) != lower(name)
我接受匹配的名称,即使很少有特殊字符不匹配,例如:
Databricks 的这两个名称被认为是不同的(这是正确的),但我想转义“-”字符。
有没有办法说'look for different names without considering the '-'性格'?
或者也许是一种获取两个字符串差异程度的索引的方法。
有几种方法:
- 在比较之前对字符串进行规范化 - 小写或大写字符串,用单个 space 替换所有字符,如
-
、多个 spaces 等 - 你可以使用regexp_replace function 为此。像这样:
select firstname, name
from tableA
where
regex_replace(lower(firstname), '[- ]+', ' ') !=
regex_replace(lower(name), '[- ]+', ' ')
可以通过为该规范化创建 user-defined SQL function 来进一步简化。
- 如果你想看看字符串之间有多“远”,你可以使用levenstein function that will calculate Levenstein distance:
select firstname, name
from tableA
where levenstein(lower(firstname), lower(name)) != 0
我正在分析两列以过滤看起来不相似的记录:
select firstname, name
from tableA
where lower(firstname) != lower(name)
我接受匹配的名称,即使很少有特殊字符不匹配,例如:
Databricks 的这两个名称被认为是不同的(这是正确的),但我想转义“-”字符。 有没有办法说'look for different names without considering the '-'性格'? 或者也许是一种获取两个字符串差异程度的索引的方法。
有几种方法:
- 在比较之前对字符串进行规范化 - 小写或大写字符串,用单个 space 替换所有字符,如
-
、多个 spaces 等 - 你可以使用regexp_replace function 为此。像这样:
select firstname, name
from tableA
where
regex_replace(lower(firstname), '[- ]+', ' ') !=
regex_replace(lower(name), '[- ]+', ' ')
可以通过为该规范化创建 user-defined SQL function 来进一步简化。
- 如果你想看看字符串之间有多“远”,你可以使用levenstein function that will calculate Levenstein distance:
select firstname, name
from tableA
where levenstein(lower(firstname), lower(name)) != 0