2013-03-26 3 views
2

다음과 같은 2 개의 선택적 매개 변수가있는 저장 프로 시저가 있습니다. @Zip이라는 선택적 매개 변수 중 하나를 확인해야합니다. 즉,이 저장 프로 시저를 실행할 때 사용자가 올바른 미국 우편 번호를 입력했는지 확인해야합니다. 아래의 저장 프로 시저에서와 같이 정규 표현식을 사용해 보았지만 작동하지 않았습니다. 이것을 어떻게 할 수 있는지 알려주십시오. 고맙습니다.SQL Server 저장 프로 시저에서 미국 우편 번호의 유효성을 검사해야합니다.

     CREATE PROCEDURE usp_GetDetails 
        (
         @Name varchar(255) = null, @Zip int = null 
        ) 
        as 
        begin 
     SELECT DISTINCT 
     [Name],[Address1],[Address2],[City],[Zip] 
     FROM AddressTable 
     WHERE 
      (@Name IS NULL 
         OR AddressTable.[Name] LIKE '%' + @Name + '%' 
        ) 
       AND (@Zip IS NULL 
        OR AddressTable.[Zip] = (RegexMatch (@Zip, '^\d{5}(\-\d{4})?$')) 
        ) 
+0

올바른 형식인지, 아니면 실제 우편 번호인지 실제로 확인 하시겠습니까? 5 + 4 형식이기 때문에 그것이 진짜라는 것을 의미하지는 않습니다. 또한 나는 그것을 INT로 사용하지 않을 것입니다. 그것은 5 + 4와 함께 작동하지 않을 것이고, 그것은 또한 선두 0을 떨어 뜨릴 것입니다. –

+0

AFAIK SQL Server.R u에는 'RegexMatch' 기능이 없으므로'CLR '을 사용하여 함수를 사용할 수 있습니까? – praveen

+0

Aaron 저는 varchar로 @Zip을 전달했고 작동했습니다. 고맙습니다. 실제 우편 번호인지 아닌지에 대해 걱정하지 않습니다. 주소록에서 일치하는 레코드를 가져오고 싶습니다. – user1164164

답변

6

SQL 서버는 분명히 this StackOverflow posting에 따라 정규 표현식을 지원하지만, 일부 극단적 인 설치있을 것 같습니다.

@ZipINT 유형으로 허용하기 때문에 0에서 99,999 사이인지 확인하면됩니다. 하지만 그것은 당신의 시도한 정규식과는 확연히 다릅니다. 그리고 아론 (Aaron)이 위에 지적한 것처럼 캐릭터 유형을 사용하는 것이 좋습니다.

@Zip이 문자 유형이면 SQL Server LIKE은 유효성을 검사 할만큼 강력합니다. 우편은 5 자리 또는 9 자리 숫자 또는 "5 자리 플러스 대시 플러스 네 자리"경우이 확인됩니다

IF @Zip LIKE '[0-9][0-9][0-9][0-9][0-9]' 
    OR @Zip LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
    OR @Zip LIKE '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' 

이 우편을 보장이 잘 형성이다,하지만 ZIP이 보장되지 않습니다 실제로 미국 우편 서비스에 의해 유효한 것으로 인정되지 않으며 ZIP이 도로 주소, 도시 및 주에 적합하다는 것을 보장하지 않습니다.

관련 문제