Databricks sql, как сравнить экранирующие символы строки
Я анализирую два столбца, чтобы отфильтровать записи, которые не похожи друг на друга:
select firstname, name
from tableA
where lower(firstname) != lower(name)
Я принимаю имена, которые совпадают, даже если нет нескольких специальных символов, например:
Эти два имени для Databricks считаются разными (правильно), но я хочу избежать этого символа '-'. Есть ли способ сказать «ищите разные имена без учета символа« - »? Или, может быть, способ получить указатель на разницу между двумя строками.
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