Регулярное выражение в SQL
Использую Postgres (если это важно). Есть задача найди среди пользователей тех, у кого email содержит в себе определенную строку.
Например есть пользователи со следующими email-ами: [email protected], [email protected], [email protected], [email protected], [email protected]
Строка, по которой происходит поиск - petya. Соотвественно, используя регулярку (наверное?), должны вывестись строки из таблицы пользователей, у которых email-ы [email protected], [email protected] и [email protected]
UPD. Должна быть возможность найти и наоборот. Например при исходной строке petya123 нужно найти те же email-ы, что указаны выше.
Подскажите как это сделать? Отдельное спасибо будет тому, кто покажет (отдельным примером), как вместо строки petya можно передать целый email ([email protected]) и провести поиск по той части, которая до знака @.
Ответы (1 шт):
Работа для обычного ILIKE, разве нет?
SELECT *
FROM t_1
WHERE email ILIKE '%petya%'
;
Последний ваш параграф не понял, но если вам нужно взять юзернейм из целого адреса, я рекомендую делать это на стороне приложения. Если же никак, то как-то так:
SELECT *
FROM t_1
WHERE email ILIKE '%' || substring('[email protected]' from '^[^@]*') || '%'
;