检查日期列的约束格式,在插入期间检查其有效日期

问题描述 投票:0回答:3

我想要一个检查约束。检查日期列,日期是否为yyyy-MM-dd格式。

我不知道。但我只是试过,

create table #date( dob date check (dob like 'yyyy-MM-dd'))

insert #date values( '2018-09-24')

所以日期转换错误仍然存​​在。

更新1

注意:

  1. @@version: Microsoft SQL Server 2012
  2. 如果date列在varchar,那么它也是受欢迎的。
  3. 一些答案包含convert()。但我的情况是,前端团队正在插入值为dd-MM-yyyy。我告诉很多时候插入正确的格式为yyyy-MM-dd(根据我们的程序)。但他们不能。所以我想根据格式限制他们的插入值。

提前致谢。

Tamilppukal。

sql-server-2012 date-format check-constraint
3个回答
1
投票
create table #date( dob date check  
 (dob like '[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]'));

 insert into #date values('2018-08-20')

试试这个以获得预期的输出。


1
投票

DATE不会在内部存储为字符串,因此您不能使用CHECK约束。

create table #date(dob date);

'yyyy-MM-dd'只是演讲事项。

至于插入,您可以使用:

INSERT INTO tab(col) VALUES ('20180101');  -- 'YYYYMMDD' culture independent
INSERT INTO tab(col) VALUES (CONVERT(DATE, 'string', style));

CONVERT

CONVERT(data_type [(length)],表达式[,style])


0
投票

DATE应被视为二进制可排序类型。

当然:使用预处理语句存储它,使用Date对象是一些编程语言。

不幸的是,在非标准格式YYYYMMDD中插入字符串文字:

'20181231' for 2018-12-31

要再次显示为ISO标准日期,YYYY-MM-DD,请使用预定义的23。

SELECT CONVERT(VARCHAR, dob, 23) ...
© www.soinside.com 2019 - 2024. All rights reserved.