Сценарий Sql для нахождения недопустимых адресов электронной почты

Самый простой способ решить java.lang.ClassNotFoundException - добавить отсутствующий класс в ваш путь к классам. Это действительно так просто.

Как бы то ни было, я обычно отговариваю людей использовать JMS ObjectMessage именно по этой причине. Если объект, который вы помещаете в сообщение, не является чрезвычайно простым, вы заканчиваете тем, что добавляете классы своему клиенту, которые могут на самом деле не понадобиться, кроме как десериализовать другой объект. Кроме того, сериализация и десериализация объектов Java довольно медленная. Я обычно рекомендую приложениям обмениваться данными с помощью простых байтовых массивов или даже использовать что-то вроде JSON (хотя JSON может быть медленным, есть более быстрые альтернативы).

60
задан BDL 23 October 2019 в 08:29
поделиться

4 ответа

SELECT * FROM people WHERE email NOT LIKE '%_@__%.__%'

Anything more complex will likely return false negatives and run slower.

Validating e-mail addresses in code is virtually impossible.

EDIT: Related questions

148
ответ дан 24 November 2019 в 17:32
поделиться

Here is a quick and easy solution:

CREATE FUNCTION dbo.vaValidEmail(@EMAIL varchar(100))

RETURNS bit as
BEGIN     
  DECLARE @bitRetVal as Bit
  IF (@EMAIL <> '' AND @EMAIL NOT LIKE '_%@__%.__%')
     SET @bitRetVal = 0  -- Invalid
  ELSE 
    SET @bitRetVal = 1   -- Valid
  RETURN @bitRetVal
END 

Then you can find all rows by using the function:

SELECT * FROM users WHERE dbo.vaValidEmail(email) = 0

If you are not happy with creating a function in your database, you can use the LIKE-clause directly in your query:

SELECT * FROM users WHERE email NOT LIKE '_%@__%.__%'

Source

19
ответ дан 24 November 2019 в 17:32
поделиться
select * from users 
WHERE NOT
(     CHARINDEX(' ',LTRIM(RTRIM([Email]))) = 0 
AND  LEFT(LTRIM([Email]),1) <> '@' 
AND  RIGHT(RTRIM([Email]),1) <> '.' 
AND  CHARINDEX('.',[Email],CHARINDEX('@',[Email])) - CHARINDEX('@',[Email]) > 1 
AND  LEN(LTRIM(RTRIM([Email]))) - LEN(REPLACE(LTRIM(RTRIM([Email])),'@','')) = 1 
AND  CHARINDEX('.',REVERSE(LTRIM(RTRIM([Email])))) >= 3 
AND  (CHARINDEX('.@',[Email]) = 0 AND CHARINDEX('..',[Email]) = 0) 
-1
ответ дан 24 November 2019 в 17:32
поделиться
select
    email 
from loginuser where
patindex ('%[ &'',":;!+=\/()<>]*%', email) > 0  -- Invalid characters
or patindex ('[@.-_]%', email) > 0   -- Valid but cannot be starting character
or patindex ('%[@.-_]', email) > 0   -- Valid but cannot be ending character
or email not like '%@%.%'   -- Must contain at least one @ and one .
or email like '%..%'        -- Cannot have two periods in a row
or email like '%@%@%'       -- Cannot have two @ anywhere
or email like '%.@%' or email like '%@.%' -- Cant have @ and . next to each other
or email like '%.cm' or email like '%.co' -- Unlikely. Probably typos 
or email like '%.or' or email like '%.ne' -- Missing last letter

Это сработало для меня. Пришлось применить rtrim и ltrim, чтобы избежать ложных срабатываний.

Источник: http://sevenwires.blogspot.com/2008/09/sql-how-to-find-invalid-email-in-sql.html

Версия Postgres:

select user_guid, user_guid email_address, creation_date, email_verified, active
from user_data where
length(substring (email_address from '%[ &'',":;!+=\/()<>]%')) > 0  -- Invalid characters
or length(substring (email_address from '[@.-_]%')) > 0   -- Valid but cannot be starting character
or length(substring (email_address from '%[@.-_]')) > 0   -- Valid but cannot be ending character
or email_address not like '%@%.%'   -- Must contain at least one @ and one .
or email_address like '%..%'        -- Cannot have two periods in a row
or email_address like '%@%@%'       -- Cannot have two @ anywhere
or email_address like '%.@%' or email_address like '%@.%' -- Cant have @ and . next to each other
or email_address like '%.cm' or email_address like '%.co' -- Unlikely. Probably typos 
or email_address like '%.or' or email_address like '%.ne' -- Missing last letter
;
2
ответ дан 24 November 2019 в 17:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: