Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Função de verificação de email SQL usando Regex


A resposta curta é que não, isso não pode ser feito. A sintaxe para LIKE não é o mesmo que (e muito menos poderoso que) expressões regulares. Consulte também Expressões regulares do SQL Server em T-SQL

Mas você pode fazer o salto para .Net e fazer a correspondência lá. Você pode instanciar um VBScript.RegExp dentro do T-SQL usando sp_OACreate e usar isso.
CREATE FUNCTION dbo.isValidEmailFormat
(
    @Email varchar(100)
)
RETURNS bit
AS
BEGIN
    DECLARE @pattern varchar(4000)
    SET @pattern = '[a-zA-Z0-9_\-][email protected]([a-zA-Z0-9_\-]+\.)+(com|org|edu|nz|au)'
    DECLARE @Result bit

    DECLARE @objRegexExp INT
    EXEC sp_OACreate 'VBScript.RegExp', @objRegexExp OUT

    EXEC sp_OASetProperty @objRegexExp, 'Pattern', @pattern
    EXEC sp_OASetProperty @objRegexExp, 'IgnoreCase', 1
    EXEC sp_OASetProperty @objRegexExp, 'MultiLine', 0
    EXEC sp_OASetProperty @objRegexExp, 'Global', false
    EXEC sp_OASetProperty @objRegexExp, 'CultureInvariant', true

    EXEC sp_OAMethod @objRegexExp, 'Test', @Result OUT, @Email

    EXEC sp_OADestroy @objRegexExp

    RETURN @Result
END

Dê uma olhada em Erro de verificação de e-mail Regex - usando JavaScript para ver se você quer ser um pouco menos restritivo sobre quais caracteres são permitidos.