У меня есть письмо вроде [email protected]
.Удалить часть адреса электронной почты
Я хочу выбрать все после @
и до .
.
Результат должен быть joebloggs
.
У меня есть письмо вроде [email protected]
.Удалить часть адреса электронной почты
Я хочу выбрать все после @
и до .
.
Результат должен быть joebloggs
.
Простой шаблон регулярного выражения должен делать эту работу.
SELECT regexp_matches('[email protected]', '@([^.]+)\.');
Edit: исправлен для поддержки поддоменов. Я предполагаю, что вы хотите получить часть до первой точки.
Вот решение с использованием substring
и position
:
substring(col from (position('@' in col)+1)
for (
position('.' in substring(col from (position('@' in col)+1))) - 1
)
)
@hvd. Просмотрите мой обновленный ответ. И понятно, почему регулярное выражение - это путь сюда. –
Ваш обновленный ответ выглядит настолько функционально, насколько это можно разумно ожидать. Вы можете немного упростить, избавившись от позиции 'for (char_length (col) - ('@' в col)). – hvd
Решения с использованием подстроки и инстр
ВЫБРАТЬ подстроки ('[email protected] 'инстр ('[email protected]', '@') + 1, инстр ('[email protected] ','. ') - (instr ([email protected]', '@') + 1)) FROM dual;
Возможно, это странная идея, но не отдельно ли локальная и доменная часть адреса проще, если вы не всегда хотите весь адрес? Я бы назвал одно поле «email_local», а другое «email_domain» – x13