检查加拿大邮政编码的约束?

Nin*_*per 4 sql-server check-constraints

有没有办法检查加拿大邮政编码是否有效?不确定这样的事情是否可行:

PostalCode varchar(10) CHECK(PostalCode>='t1w1v1' and PostalCode<='t9w9v9'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 8

加拿大邮政编码

格式为 A1A 1A1,其中 A 是一个字母,1 是一个数字,第三个和第四个字符之间有一个空格……邮政编码不包括字母 D、F、I、O、Q 或 U,并且第一个位置也不使用字母 W 或 Z。

所以下面应该这样做。

CHECK (PostCode LIKE REPLACE(REPLACE('Alpha1[0-9]Alpha2 [0-9]Alpha2[0-9]', 
                                     'Alpha1', 
                                     '[ABCEGHJKLMNPRSTVXY]'), 
                             'Alpha2', 
                             '[ABCEGHJKLMNPRSTVWXYZ]') COLLATE Latin1_General_Bin) )   
Run Code Online (Sandbox Code Playgroud)

CHAR(7)如果您只允许恰好 7 个字符长的值(特别是如果此列是强制性的),您也应该使用。

由于空格出现在第三个和第四个字符之间,可以说是多余的,应该在显示时添加。如果您决定走那条路线,请使用CHAR(6)并删除中间的空间'Alpha1[0-9]Alpha2 [0-9]Alpha2[0-9]'