在SqlServer 2005中我有一个TimeOfDay字段是varchar(5)的表。我只想将字段值限制为有效时间(13:40,2:20)。这是我到目前为止Sqlserver表时间字段约束
ALTER TABLE tbl ADD CONSTRAINT ck
CHECK (TimeOfDay like '[1-2][0-9]:[0-9][0-9]')
我想要约束,以允许第一个数字是可选的,但没有太多的运气。
在SqlServer 2005中我有一个TimeOfDay字段是varchar(5)的表。我只想将字段值限制为有效时间(13:40,2:20)。这是我到目前为止Sqlserver表时间字段约束
ALTER TABLE tbl ADD CONSTRAINT ck
CHECK (TimeOfDay like '[1-2][0-9]:[0-9][0-9]')
我想要约束,以允许第一个数字是可选的,但没有太多的运气。
为了禁止 “时代” 如29:99
ALTER TABLE tbl ADD CONSTRAINT ck
CHECK (
TimeOfDay like '[0-9]:[0-5][0-9]' OR
TimeOfDay like '1[0-9]:[0-5][0-9]' OR
TimeOfDay like '2[0-3]:[0-5][0-9]'
)
你有没有考虑过存储为datetime
与日期部分设置为1900 1月1日?
存储日期是非常难看的,因为它没有被使用。 – Kenoyer130 2010-09-29 16:43:16
@ Kenoyer130 - 同意(这在SQL Server 2008中使用'time'数据类型更好),但是如果您需要排序或计算存储在datetime中的时间差异使事情变得更容易。 – 2010-09-29 17:00:36
ALTER TABLE tbl ADD CONSTRAINT ck
CHECK (
(LEN(TimeOfDay) = 5 and TimeOfDay like '[1-2][0-9]:[0-9][0-9]')
or (LEN(TimeOfDay) = 4 and TimeOfDay like '[0-9]:[0-9][0-9]')
)
+1包含'LEN()' – 2010-09-29 16:25:12
ALTER TABLE tbl ADD CONSTRAINT ck
CHECK (
TimeOfDay like '[1-2][0-9]:[0-9][0-9]'
OR TimeOfDay like '[0-9]:[0-9][0-9]'
)
为什么不包含0呢? – 2010-09-29 16:19:31
hrm好点。这样人们不会输入1:30,而认为这意味着13:30。 – Kenoyer130 2010-09-29 16:42:49