Nin*_*per 4 sql-server check-constraints
有没有办法检查加拿大邮政编码是否有效?不确定这样的事情是否可行:
PostalCode varchar(10) CHECK(PostalCode>='t1w1v1' and PostalCode<='t9w9v9'
Run Code Online (Sandbox Code Playgroud)
格式为 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]'