#regex #string #postgresql #where-clause
#регулярное выражение #строка #postgresql #where-предложение
Вопрос:
Я сравниваю два столбца из разных таблиц, чтобы получить соответствующие записи. Эти таблицы не имеют никакого уникального ключа, кроме имени и фамилии.Но я не получаю правильный вывод, если у TableA есть Aaa’a, а у 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)
)
-Спасибо
Ответ №1:
Вы могли бы попробовать подход с регулярным выражением. Предполагая, что вы хотите сравнить только буквенные и цифровые символы, вы можете сделать:
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')
В основном это удаляет несловесные символы из каждой строки перед их сравнением — при этом символ слова определяется как буква или цифра, плюс символ подчеркивания.
Ответ №2:
Если вы хотите удалить только то, что не является буквой, используйте:
regexp_replace(a.namef, '[^A-Za-z]', '', 'g') = regexp_replace(b.namef, '[^A-Za-z]', '', 'g')
Комментарии:
1. Спасибо и ценю ваше время и ответ. Но это полностью игнорирует все, что не является буквой. Но я могу использовать это для другой цели.