2016-08-11 2 views

ответ

-1

Это должно работать:

select SUBSTRING(
     @email, --input string 
     charindex('@', @email) + 1, --character just after the @ 
     charindex('.', @email, charindex('@', @email)) - charindex('@', @email) - 1 --distance between @ and the first . following it 
     ) 
+0

Это решение не будет работать, если адрес электронной почты имеет '.' В начале, например 'firstname.lastname @ example.com' – Henry

+0

Обновлено для решения этой проблемы. – morgb

-1

Вы ищете это.

Select substring(@email,charindex('@', @email)+1, 
charindex('.',right(@email,len(@email) - charindex('@', @email)))-1) 

Адрес электронной почты может содержать . несколько раз до и после @, это должно возвращать первую часть домена после @

+0

В этом коде отсутствуют несколько аргументов, и без комментариев невозможно сказать, что вы на самом деле пытаетесь сделать. Вы можете проверить свой код и добавить комментарии. – morgb

+0

Спасибо, сейчас все правильно. – Henry

0
DECLARE @emailAddress TABLE (emailAddress VARCHAR(255)) 
INSERT @emailAddress (emailAddress) 
VALUES ('[email protected]'), 
     ('[email protected]'), 
     ('notanemailaddress') 

SELECT IIF(emailAddress LIKE '%@%.%', -- Confirm it has valid structure 
      SUBSTRING(emailAddress, 
         CHARINDEX('@',emailAddress)+1, 
         CHARINDEX('.',emailAddress,CHARINDEX('@',emailAddress))-(CHARINDEX('@',emailAddress)+1)), --Extract the domain 
      NULL) -- Provide default value if not an emailAddress 
     AS emailDomain 
FROM @emailAddress 

Это объясняет для значений, которые недействительны emailAddresses, и возвращает NULL (или все, что вы там помещаете), когда недопустимая оценка e встречается.

Смежные вопросы