2011-09-07 2 views
1

'전자 메일'과 '값'열이있는 '고객'테이블이 있습니다. '전자 메일'열에는 전자 메일 주소가 포함되어 있으며 '값'열에는 NULL 값이 들어 있습니다. 이제 전자 메일이 올바른 형식 (@ bc)으로되어 있고 '값'열이 '참'으로 설정되어 있고 전자 메일 주소가 잘못된 형식 (abc 또는 @bc) 인 경우 업데이트 명령을 작성하고 싶습니다. '값'열을 '거짓'으로 설정하십시오. 이제 내 질문은 SQL 명령을 작성하여 어떤 이메일 주소가 올바른지 알아내는 것입니다. 어떤 제안 바랍니다. 감사.전자 메일 주소가있는 SQL 테이블 열

+2

어떤 RDBMS를 사용하고 있습니까? –

+1

이 작업에 대한 결정을 내리기 전에 [이 기사 작성] (http://www.regular-expressions.info/email.html)을 읽으십시오. 구문 론적으로 유효한 이메일 주소가 아직 제공되지 않을 수도 있다는 점에서 고려해야 할 중요한 절충안이 있습니다. – cdhowie

답변

0

즉, SQL 측 떨어져 훨씬 더 확인하는 코드, 당신이 그 이메일 주소를 얻기 위해 사용하는 어느 언어로 그 쓰기, 그럼 그냥 간단한 쿼리

+0

DBMS에 정상적인 RegEx 지원이 없다면 이점이 없습니다. –

1

당신이 사용하는 경우를 사용하여 업데이트를 수행 SQL- 서버 예제 (here에서 가져옴)를 사용하면 도움이됩니다.

IF (
    CHARINDEX(' ',LTRIM(RTRIM(@email_address))) = 0 
AND LEFT(LTRIM(@email_address),1) <> '@' 
AND RIGHT(RTRIM(@email_address),1) <> '.' 
AND CHARINDEX('.',@email_address ,CHARINDEX('@',@email_address)) - CHARINDEX('@',@email_address) > 1 
AND LEN(LTRIM(RTRIM(@email_address))) - LEN(REPLACE(LTRIM(RTRIM(@email_address)),'@','')) = 1 
AND CHARINDEX('.',REVERSE(LTRIM(RTRIM(@email_address)))) >= 3 
AND (CHARINDEX('[email protected]',@email_address) = 0 AND CHARINDEX('..',@email_address) = 0) 
) 
    print 'valid email address' 
ELSE 
    print 'not valid' 

가 나는 UPDATE...print 코드를 변경하면 일을 할 것이라고 생각합니다.

+1

@Abe Miessler : 당신은 절대적으로 맞습니다! 나는 그 부분을 삭제했다 ... 감사합니다 :) – Marco

0

프런트 엔드에서이를 수행하고 전자 메일과 함께 데이터베이스에 유효성 검사 결과를 전달하는 것이 훨씬 낫습니다. 이것은 정규식 일치에 대한 좋은 사례 인 것 같습니다.

2

SQL Server 2005 이상을 사용하는 경우 전자 메일의 유효성을 검사하는 CLR 기능을 만드는 것이 좋습니다. 이 기능은 사용자의 전자 메일 주소에 대한 정규식을 찾을 일단 http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

(아래 시도)와 같은 업데이트 문 사용 :이 작업을 수행하는 방법을 이해하기 위해이 문서에서 봐

UPDATE Customers 
SET Value = dbo.RegexMatch(email , N'^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$') 
0

이메일 주소가

권리 인 알 동안에 올바른 패턴에 맞는 실패 데이터베이스 값에을 확인 하기 위해 할 수있는 전자 메일 주소의 경우 을 확인하면 전자 메일 주소를 사용하여 해당받는 사람에게 연락 할 수 있는지 여부를 확인할 수 없습니다 (닫힌 세계 가정이 적용됨).

패턴 일치 지원은 SQL 구현마다 다릅니다. 예를 들어 SQL Server는 단순한 패턴 일치를 위해 LIKE입니다. 특정 실패에 대해 여러 개의 테스트를 작성하는 것이 가장 좋습니다. 정확히 하나의 @ 심볼을 포함하지 않으며, 도메인이없고, 너무 길거나, 허용 된 것 이외의 문자가 포함됩니다. 각 테스트에 고유 한 제약 조건 이름을 부여하면보다 세밀한 오류 메시지를 표시 할 수 있습니다. 사용자에게 전달됩니다.

관련 문제