Red de conocimiento informático - Material del sitio web - Cómo detectar el formato de correo electrónico usando una declaración SQL

Cómo detectar el formato de correo electrónico usando una declaración SQL

No lo he escrito yo mismo, esto es citar opiniones de otras personas, así que tenemos que ser claros, lo mejor es usar expresiones regulares

Crear FUNCTION F_EMAIL

(

@ EMAIL VARCHAR(50)

)

RETURNS INT -- Devuelve 1 para correcto; devuelve 0 para error

BEGIN

DECLARAR @ VALOR INT, @LEN INT

DECLARAR @TMP VARCHAR(50)

DECLARAR @CHECK1 VARCHAR(50)

DECLARAR @CHECK2 VARCHAR (50)

DECLARE @CHECK3 VARCHAR(50)

SET @TMP=RTRIM(LTRIM(@EMAIL))

SET @LEN=LEN(@ TMP)

IF @LEN-len(reemplazar(@ tmp,'@',''))=1 AND @len-len(reemplazar(@tmp,'.'.,'')) >=1 AND CHARINDEX ('@',@TMP)<>1

COMENZAR

SET @CHECK1=LEFT(@TMP,CHARINDEX('@',@TMP) -1)

SET @CHECK2=COSAS(@ TMP,1,CHARINDEX('@',@TMP),'')

SET @CHECK3=COSAS(@CHECK2, 1,CHARINDEX(' .' ,@CHECK2),'')

SET @CHECK2=LEFT(@CHECK2,CHARINDEX('.'.,@CHECK2)-1)

SI LEN(@ CHECK1)>0 Y LEN(@CHECK2)>0 Y LEN(@CHECK3)>0

COMENZAR

IF PATINDEX('%[^a-zA -Z0-9. _-]%',@ CHECK1)>0

SET @VALUE=0

ELSE

COMENZAR

IF PATINDEX(' %[^a-zA-Z0-9._-]%',@CHECK2)>0

SET @VALUE=0

ELSE

COMENZAR

IF CHARINDEX(UPPER(@CHECK2),UPPER('gmail,QQ,163,sina,yahoo'))>0

COMENZAR

IF PATINDEX ('%[^a-zA-Z0-. 9._-]%',@CHECK3)> ELSE SET @VALUE= 1

FIN

ELSE SET @VALUE=0

FIN

FIN

FIN

ELSESET @VALUE=0

FIN

FIN

ELSE SET @VALUE=0

FIN

ELSE SET @VALUE=0

RETURN @VALUE

END

--Prueba

Crear tabla tb

(

id int

identidad,

correo electrónico varchar(50),

CONSTRAINT chk_email CHECK (dbo. F_EMAIL(email)

)F_EMAIL(email)=1)

)

insertar en tb SELECT 'ASDF@163.COM'

insertar en tb SELECT 'ASDF@1263.COM'

insertar en tb SELECT 'ASDF@QQ.COM'

insertar en tb SELECT 'ASDF@yahoo.COM'

insertar en tb SELECT 'AS@DF@yahoo.COM'

p>

/*

(el número de filas afectadas es 1)

Servidor: Mensaje 547, Nivel 16, Estado 1, Fila 1

La declaración INSERT entra en conflicto con la restricción COLUMN CHECK 'chk_email'. El conflicto ocurrió en la base de datos "Prueba", tabla "tb", columna "correo electrónico".

La declaración ha sido cancelada.

(El número de filas afectadas es 1)

(El número de filas afectadas es 1)

Servidor: Mensaje 547, Nivel 16, Estado 1, Línea 1

La instrucción INSERT entra en conflicto con la restricción COLUMN CHECK "chk_email". El conflicto ocurrió en la base de datos "Prueba", tabla "tb", columna "correo electrónico".

La declaración ha sido cancelada. */

SELECCIONAR * DE TB

/*

id de correo electrónico

----------- - -------------------------------------------------

1 ASDF@163.COM

3 ASDF@QQ.COM

4 ASDF@yahoo.COM

(Afectados El número de líneas son 3)

*/