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 |