SQL Server检查约束以检查位置中的符号

时间:2012-08-12 20:36:45

标签: sql-server sql-server-2008

我的表格中有一个名为duration的{​​{1}}列。

如何添加检查约束来检查前两个字符和后两个字符是否为数字,第三个字符是":"

例如:

varchar(5)

2 个答案:

答案 0 :(得分:5)

这应该有效:

create table test (
id int identity(1,1),
name varchar(5) constraint tmp_chk check(name like '[0-9][0-9]:[0-9][0-9]')
)

测试用例:

insert into test (name) values ('12:34')
insert into test (name) values ('12:a4')
insert into test (name) values ('12x34')
insert into test (name) values ('a2:34')
insert into test (name) values ('123:34')

答案 1 :(得分:0)

如果您必须使用varchar(5),则 C 2 的答案是正确的。 但是,如果您真的想解决问题,则需要忘记varchar(5)并使用time datatype 。使用Time打开了更准确甚至计算的可能性,使用varchar(5)是不可能的。

如果您的duration可以大于23:59:59.9999999(Time数据类型的最大值),那么您应该使用INT的味道来包含最大分钟数或秒数需要并存储总分钟或秒。如果你的持续时间是5小时7分钟:05:07存储普通的int:307分钟,或18420秒。