约束检查邮政编码的10位字符使用

Sae*_*eid 3 sql t-sql sql-server-2008

我有一个Char(10)列类型的表,命名postal Code,我需要一个约束检查所有值只是10个数字像1234567890没有别的,我使用以下:

CONSTRAINT [CH_PCDigit] CHECK ( [PostalCode] LIKE '%[^0-9]%'),
CONSTRAINT [CH_PCLength] CHECK ( LEN([PostalCode])=10)
Run Code Online (Sandbox Code Playgroud)

但没有正常工作,为什么?你的建议是什么?有没有办法将这个2约束合并为一个?

如果我想要这样的邮政编码怎么样:12345-54321意思是:5digit-5digit?(也必须输入Char(11)).

有没有人知道SQl中Rgex或Constraint Check的任何好的来源?

Mit*_*eat 10

SQL Server TSQL不支持完整的RegEx.您可以在一个约束中执行您想要的操作,如下所示:

CONSTRAINT [CH_PCDigit] 
    CHECK ([PostalCode] LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
Run Code Online (Sandbox Code Playgroud)

或更好:

CONSTRAINT [CH_PCDigit] 
    CHECK ([PostalCode] LIKE REPLICATE('[0-9]', 10))
Run Code Online (Sandbox Code Playgroud)

如果你想允许破折号:

CREATE table  ChkTest
(
    PostalCode char(10) not null
        CONSTRAINT [CH_PCDigit]  
    CHECK ([PostalCode] LIKE REPLICATE('[0-9,-]', 10)) 
)

-- Test Code...

insert into ChkTest 
select '1234567890'

insert into ChkTest 
select '123456780'

insert into ChkTest 
select '12345678y0'

insert into ChkTest 
select '12345678901'

select * from ChkTest

insert into ChkTest 
select '12345-8901'
Run Code Online (Sandbox Code Playgroud)