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
Другие вопросы по тегам