Регулярное выражение в 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 шт):

Автор решения: Ainar-G

Работа для обычного ILIKE, разве нет?

SELECT *
  FROM t_1
 WHERE email ILIKE '%petya%'
;

Последний ваш параграф не понял, но если вам нужно взять юзернейм из целого адреса, я рекомендую делать это на стороне приложения. Если же никак, то как-то так:

SELECT *
  FROM t_1
 WHERE email ILIKE '%' || substring('[email protected]' from '^[^@]*') || '%'
;
→ Ссылка