Сопоставление с образцом В SQL, где символы появляются где угодно, но не в последовательности - PullRequest
2 голосов
/ 28 мая 2019

Я пытаюсь написать запрос, чтобы исправить недопустимые форматы электронной почты. Неверный формат электронной почты, который я получаю, имеет форму first@name_company@com.

Символы всегда отображаются как '@' '_' '@' в этой последовательности.

Если это формат, тогда я заменяю @ на . и _ на @, чтобы получить правильный формат:

first.name@company.com

Я рассматриваю такое состояние дела:

When @email like '[a-z,0-9,_,-,@]_[a-z,0-9,_,-@]'  THEN replace(replace(replace(@email,'@','.'),'_','@'))

Кажется, это работает, только если я поставлю "_" в качестве подстановочного знака, подобного этому '[a-z,0-9,_,-,@]%_%[a-z,0-9,_,-@]'

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Я нашел два способа сделать это, используя ваш конкретный пример.

create table #myTemp
(someText varchar(50))

insert into #myTemp
values
('first@name_company@com')

select 
    -- check based on length after replacing the characters with nothing
    case when len(someText) - len(replace(replace(someText,'@',''),'_','')) = 3 
    then replace(replace(someText,'@','.'),'_','@')
    end as LengthCheck,
    -- check the position of @ to the left and right of _
    case when charindex('@',(Right(someText, CHARINDEX('_', reverse(someText))-1))) > 0
        and charindex('@',(LEFT(someText, CHARINDEX('_', someText)))) > 0
    then replace(replace(someText,'@','.'),'_','@')
    end as CharCheck
from #myTemp
0 голосов
/ 28 мая 2019

Спасибо всем.Я использовал следующее, и это, кажется, работает:

case when charindex('@',@email,patindex ('%@%',@email)+1) - (patindex ('%@%',@email)+1)>1 and 

substring(@email,
     patindex ('%@%',@email)+1,

     charindex('@',@email,patindex ('%@%',@email)+1) - (patindex ('%@%',@email)+1)

     ) like '%_%' 
0 голосов
/ 28 мая 2019

SQL Server довольно ограничен в сопоставлении с образцом, но вы можете сделать что-то вроде этого:

where email like '%_@_%' and      -- @ with something before and after
      email not like '%@%@%' and  -- not two @s
      email not like '%[^-_@.a-zA-Z0-9]%'  -- has no obvious bad characters

Это не гарантия хорошей электронной почты, но она ловит много проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...