检查日期列的约束作为格式明智检查其在插入期间的有效日期
check constraint for date column as format wise check its an valid date during the insertion
我想要一个检查约束。检查日期列,日期是否为 yyyy-MM-dd
格式。
我不知道。但我只是试了一下,
create table #date( dob date check (dob like 'yyyy-MM-dd'))
insert #date values( '2018-09-24')
所以日期转换错误仍然存在。
更新 1
注:
@@version: Microsoft SQL Server 2012
- 如果
date
列在varchar
,那也欢迎
- 一些答案包含
convert()
。但我的情况是,前端团队将值插入为 dd-MM-yyyy
。我告诉过很多次插入正确的格式为 yyyy-MM-dd
(按照我们的程序)。但他们不能。所以我想根据格式限制他们的插入值。
提前致谢。
TamilPugal.
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 ( data_type [ ( length ) ] , expression [ , style ] )
DATE 应被视为二进制可排序类型。
肯定:用prepared statement存储,用Date对象是某种编程语言。
不幸的是,字符串文字的插入采用非标准格式 YYYYMMDD
:
'20181231' for 2018-12-31
要再次显示为 ISO 标准日期 YYYY-MM-DD,请使用预定义的 23。
SELECT CONVERT(VARCHAR, dob, 23) ...
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')
试试这个以获得预期的输出。
我想要一个检查约束。检查日期列,日期是否为 yyyy-MM-dd
格式。
我不知道。但我只是试了一下,
create table #date( dob date check (dob like 'yyyy-MM-dd'))
insert #date values( '2018-09-24')
所以日期转换错误仍然存在。
更新 1
注:
@@version: Microsoft SQL Server 2012
- 如果
date
列在varchar
,那也欢迎 - 一些答案包含
convert()
。但我的情况是,前端团队将值插入为dd-MM-yyyy
。我告诉过很多次插入正确的格式为yyyy-MM-dd
(按照我们的程序)。但他们不能。所以我想根据格式限制他们的插入值。
提前致谢。
TamilPugal.
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 ( data_type [ ( length ) ] , expression [ , style ] )
DATE 应被视为二进制可排序类型。
肯定:用prepared statement存储,用Date对象是某种编程语言。
不幸的是,字符串文字的插入采用非标准格式 YYYYMMDD
:
'20181231' for 2018-12-31
要再次显示为 ISO 标准日期 YYYY-MM-DD,请使用预定义的 23。
SELECT CONVERT(VARCHAR, dob, 23) ...
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')
试试这个以获得预期的输出。