Извлечение электронной почты из строки в SQL Server

У меня есть столбец, содержащий адрес электронной почты, который я пытаюсь извлечь.

Обычно он начинается с «Пользователь:» и заканчивается прямо перед «TextClient». Пытался использовать комбинацию SUBSTRING и CHARINDEX, возвращая значения после «Пользователь:». Другой вариант был найти "@" и вытащить всё до и после. На данный момент у меня есть следующий код, но я извлекаю слишком много информации.

WITH emailString AS
(
    SELECT 'Text Draft Saved - User: [email protected] TextClient: Blah' AS st
)
SELECT
    st
    , STUFF(SUBSTRING(st,1,CHARINDEX(' ',st,CHARINDEX('@', st))-1),1, 
    CHARINDEX('@', st) - CHARINDEX(' ',
    REVERSE(SUBSTRING(st,1,CHARINDEX('@', st)-1))),'')  
FROM emailString

Я получаю следующее:

ул. суб Черновик текста сохранен – Пользователь: [email protected] TextClient: Blah Сохранено – Пользователь: [email protected] TextClient:

Вам нужно сделать это внутри SQL Server? Большинство языков программирования (в число которых не входит SQL Server) включают поддержку регулярных выражений, поэтому подключающийся клиент, написанный на .NET, NodeJS или PowerShell (например), может легко справиться с этой задачей.

AlwaysLearning 06.08.2024 05:41

К сожалению, это должно быть в SQL Server.

James 06.08.2024 18:25
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
SELECT 
    SUBSTRING(
        'Text Draft Saved - User: [email protected] TextClient: Blah', 
        CHARINDEX('User: ', 'Text Draft Saved - User: [email protected] TextClient: Blah') + LEN('User: '), 
        CHARINDEX(' TextClient: ', 'Text Draft Saved - User: [email protected] TextClient: Blah') - (CHARINDEX('User: ', 'Text Draft Saved - User: [email protected] TextClient: Blah') + LEN('User: '))
    ) AS ExtractedEmail;

или

DECLARE @TestString NVARCHAR(100) = 'Text Draft Saved - User: [email protected] TextClient: Blah';

SELECT 
    SUBSTRING(
        @TestString, 
        CHARINDEX('User: ', @TestString) + LEN('User: '), 
        CHARINDEX(' TextClient: ', @TestString) - (CHARINDEX('User: ', @TestString) + LEN('User: '))
    ) AS ExtractedEmail;

Выход Fiddler

Другие вопросы по теме