WorkaHolic

SQL 서버에서 이메일 주소를 검증해 주는 함수

2010. 4. 8. 22:29
반응형

SQL 서버에서는 레귤러 익스프레션(Regular Expression) 기능을 제공하지 않기 때문에 이메일 검증을 정밀하게 할 수는 없다. 그렇기 때문에 여기서 제시한 SQL 스크립트는 아주 간단한 검증 작업만 한다.

아래는 이메일 주소를 검증해주는 함수로 주소가 올바르면 1, 틀리면 0을 반환한다.

CREATE FUNCTION EMAILVALIDATE (@email varChar(100))
RETURNS int
AS
BEGIN
DECLARE @invalChars varchar(5),@valid int,@badChar varchar(1),@atPos
int,@periodPos int
SET @valid = 1
SET @invalChars = ' /:,;'
--이메일 주소 길이가 0인지 점검
IF len(ltrim(rtrim(@email))) = 0
   SET @valid = 0
ELSE
        --이메일 안에 부적절한 문자가 있는지 찾기 위해 반복
        WHILE len(@invalChars) > 0
           BEGIN
                SET @badChar = substring(@invalChars,1,1)
                IF(charindex(@badChar,@email) > 0)
                   --부적절한 문자를 발견하면 리턴 값 0으로 설정
                   SET @valid = 0
                SET @invalChars = replace(@invalChars,@badChar,'')
           END
        --@문자가 있는지 점검
        SET @atPos = charindex('@',@email,1)
        IF @atPos = 0
           SET @valid = 0
        --첫번째 '@' 이후에 또 다른 '@' 문자가 있는지 점검
        IF charindex('@',@email,@atPos+1) > 0
           SET @valid = 0
        SET @periodPos = charindex('.',@email,@atPos)
        IF @periodPos = 0
           SET @valid = 0
        IF (@periodPos+3) > len(@email)
           SET @valid = 0
        RETURN (@valid)
END

위 함수를 사용하여 부적절한 이메일 주소가 있는 레코드를 삭제하는 간단한 예제를 살펴보면 다음과 같다.

DELETE FROM address WHERE master.dbo.EMAILVALIDATE(email) = 0

반응형