SQL在创建表时检查日期时间值约束

时间:2014-11-16 06:22:14

标签: sql-server datetime constraints ddl

我想询问是否有可能对datetime列进行检查约束,确保该列位于11月或5月。

Create Table TestDate (
.....
.....
date datetime not null default '14/11/2012'
...
...
constraint dateCheck check *date must be either November or May*

非常感谢你的帮助!

编辑:添加问题,

是否可以将日期列的默认值设置为2012年11月14日'而不是' 14/11 2012'?我知道它正在使用日期时间数据类型,除非更改为字符串(char / varchar)数据类型,否则无法更改?

4 个答案:

答案 0 :(得分:3)

您可以使用month功能提取日期的月份部分:

CREATE TABLE TestDate (
    date datetime not null default '14/11/2012'
    constraint dateCheck check (MONTH(date) IN (5, 11))
)

答案 1 :(得分:2)

是的,您可以在日期列的月份部分添加约束。请查看以下示例:

Create table TestTable
(
   from_date DAtetime

   constraint checkdates check (DATEPART(mm, from_date) = 11 OR DATEPART(mm, from_date) = 5)
);

如果 datepart 不包含11月或5月,则上述脚本会将插入限制在 from_date 列中。

是的,您可以使用默认值作为' 2012年11月14日'。检查此版本:

Create table TestTable
(

   from_date DAtetime default ('14 November 2012') 

   constraint checkdates check (DATEPART(mm, from_date) = 11 OR DATEPART(mm, from_date) = 5)
);

然后,尝试使用此insert语句检查默认值:

Insert into TestTable DEFAULT values

答案 2 :(得分:2)

我会在check约束

中使用datepart function
create table testDate (
  dt datetime not null default '14/11/2012'
 );

alter table testDate 
  add constraint chk_month
    check( datepart( month, dt ) in (5,11));

您可以在this SQL Fiddle

中查看此示例

答案 3 :(得分:0)

您需要使用Trigger(在插入之前和更新之前)来处理您的要求。以下MSDN链接可能会帮助您http://msdn.microsoft.com/en-us/library/ms189799.aspx