sql-server - 需要在 SQL Server 存储过程中验证美国邮政编码

标签 sql-server stored-procedures

我有一个带有 2 个可选参数的存储过程,如下所示。我需要验证可选参数之一 @Zip,即我需要确保用户在执行此存储过程时输入正确的美国邮政编码。我尝试使用正则表达式,如下面的存储过程,但它不起作用。请让我知道我怎样才能做到这一点?谢谢。

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

最佳答案

根据this StackOverflow posting,SQL Server 显然支持正则表达式。 ,但看起来有一些极端的设置。

由于您的过程接受 @Zip 作为 INT 类型,因此您只需检查它是否在 0 到 99,999 之间。但这与您尝试的正则表达式不一致,另外我建议使用亚伦上面指出的字符类型。

如果@Zip是字符类型,则SQL Server LIKE足够强大来验证它。这将检查 ZIP 是 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]'

这将确保邮政编码格式正确,但不能保证邮政编码实际上被美国邮政局识别为有效,也不能保证邮政编码适合街道地址、城市和州.

关于sql-server - 需要在 SQL Server 存储过程中验证美国邮政编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15628624/

相关文章:

sql-server - 优化sql脚本占用CPU资源

sql - 更新 ID 匹配的数据和用例以选择哪些数据

sql-server - SQL事务死锁

java.sql.SQLException : Connection is closed [POOL-HikariCP] 异常

sql-server - SQL Server服务代理: How to structure Conversations for a simple queue scenario?

sql-server - SQL Server - 将 varchar 转换为另一种排序规则(代码页)以修复字符编码

.net - SQL Server 存储过程引发多个错误

sql - 在 Like 语句中使用存储过程变量

MySQL 过程不会执行任何操作

MYSQL存储过程、案例