在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