Возможно, самое простое решение - использовать совпадение регулярного выражения POSIX :
select substring('ex@mpleEm@il@mymail.com' from '(.*)@');
Здесь происходят две слегка тонкие вещи:
- В соответствии с правилами регулярных выражений POSIX,
.*
соответствует в максимально возможной степени , поэтому он включает в себя дополнительные @
s (сравните select substring('ex@mpleEm@il@mymail.com' from '(.*?)@');
, который имеет "не жадный") модификатор)
- Функция
substring
возвращает содержимое первого захвата, если есть какие-либо захватывающие скобки, поэтому не включает заключительный @
(сравните select substring('ex@mpleEm@il@mymail.com' from '.*@');
, который не захватывает круглые скобки)