Sql server 创建表时的SQL Check datetime值约束

Sql server 创建表时的SQL Check datetime值约束,sql-server,datetime,constraints,ddl,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日”,而不是“2012

我想问一下,是否有可能对
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日”,而不是“2012年11月14日”?我知道它使用的是日期-时间数据类型,除非它更改为字符串(char/varchar)数据类型,否则无法更改?

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

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

Create Table TestDate (
.....
.....
date datetime not null default '14/11/2012'
...
...
constraint dateCheck check *date must be either November or May*
是的,您可以使用默认值“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

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

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

Create Table TestDate (
.....
.....
date datetime not null default '14/11/2012'
...
...
constraint dateCheck check *date must be either November or May*
是的,您可以使用默认值“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
我会在
检查
约束中使用

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));
您可以在

中看到一个例子,我将在
检查
约束中使用

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));
您可以在

中看到此示例。您可以使用此函数提取日期的月份部分:

CREATE TABLE TestDate (
    date datetime not null default '14/11/2012'
    constraint dateCheck check (MONTH(date) IN (5, 11))
)
您可以使用该函数提取日期的月份部分:

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

您需要使用触发器(在插入之前和更新之前)来处理您的需求。以下MSDN链接可能会帮助您使用触发器(插入前和更新前)来处理您的需求。以下MSDN链接可能会帮助您

您已经为MySQL和SQL Server标记了此链接。您正在使用这两个数据库中的哪一个?语法可能会有所不同。对不起,这是sql-server@Daniel:您已经对列使用了“不为空”约束,现在将不考虑默认值,因为不允许您在插入时跳过此列。@PareshJ从技术上讲,这是有意义的,但是否可以将默认值设置为“2012年11月14日”而不是“2012年11月14日”?我将从另一个表复制值到此表,并且不会填充此列。@PareshJ因此可以直接将默认值设置为“2012年11月14日”。非常感谢。您已经为MySQL和SQL Server标记了这个。您正在使用这两个数据库中的哪一个?语法可能会有所不同。对不起,这是sql-server@Daniel:您已经对列使用了“不为空”约束,现在将不考虑默认值,因为不允许您在插入时跳过此列。@PareshJ从技术上讲,这是有意义的,但是否可以将默认值设置为“2012年11月14日”而不是“2012年11月14日”?我将从另一个表复制值到此表,并且不会填充此列。@PareshJ因此可以直接将默认值设置为“2012年11月14日”。非常感谢。非常感谢。还有一个问题,是否可以将日期列的默认值设置为“2012年11月14日”,而不是“2012年11月14日”?我知道它使用的是datetime数据类型。谢谢。还有一个问题,是否可以将日期列的默认值设置为“2012年11月14日”,而不是“2012年11月14日”?我知道它使用的是datetime数据类型。对于触发器,您指的是哪个查询?检查约束或设置默认值?对于触发器,您指的是哪个查询?检查约束还是设置默认值?