4

以下の2つのオプションパラメータを持つストアドプロシージャがあります。オプションのパラメータ@Zipの1つを検証する必要があります。つまり、ユーザーがこのストアドプロシージャを実行しているときに、正しいUSA郵便番号を入力していることを確認する必要があります。以下のストアドプロシージャのように正規表現を使用してみましたが、機能しませんでした。どうすればこれを達成できますか?ありがとうございました。

                     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})?$'))
                     )
4

1 に答える 1

11

SQL Serverは、このStackOverflowの投稿によると、正規表現をサポートしているようですが、極端な設定があるようです。

プロシージャはタイプ@Zipとして受け入れるためINT、0から99,999の間であることを確認するだけで済みます。しかし、それはあなたが試みた正規表現とは相容れません。さらに、アーロンが上で指摘したように、文字タイプを使用することをお勧めします。

@Zipが文字タイプの場合、 LIKESQLServerはそれを検証するのに十分な堅牢性を備えています。これにより、ZIPが5桁か9桁か、「5桁+ダッシュ+4桁」かどうかがチェックされます。

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が米国郵政公社によって実際に有効であると認識されることや、ZIPが住所、市区町村、および州に適切であることが保証されるわけではありません。

于 2013-03-26T03:58:36.680 に答える