У меня есть столбец, содержащий адрес электронной почты, который я пытаюсь извлечь.
Обычно он начинается с «Пользователь:» и заканчивается прямо перед «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
Я получаю следующее:
К сожалению, это должно быть в SQL Server.
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;
Вам нужно сделать это внутри SQL Server? Большинство языков программирования (в число которых не входит SQL Server) включают поддержку регулярных выражений, поэтому подключающийся клиент, написанный на .NET, NodeJS или PowerShell (например), может легко справиться с этой задачей.