用户输入为空时如何停止在SQL Server中插入默认日期格式1900-01-01

时间:2019-05-18 11:21:41

标签: sql sql-server date date-format

我的应用程序中有一个输入字段,它接受通过日期选择器显示的日期。有时用户没有选择任何日期,他们可能会提交空白(客户要求),因为这不是必填字段。

空白提交后,存储在SQL Server 2008数据库中的数据将为'1900-01-01'。相反,我需要将数据存储为'NULL'或'empty'或'0000-00-00',但不需要任何其他有效的日期格式。

如果request.getparameter()为空,我试图插入'0000-00-00'。但这正在停止插入。

我的目的是在用户提交空白字段时插入“ NULL”或“-”或“ 0000-00-00”。而不是“ 1900-01-01”。

1 个答案:

答案 0 :(得分:2)

不幸的是,SQL Server将“空白”(即空字符串)解释为日期为1900-01-01的日期。所以当你写:

insert into t (datecol)
    values ('');

这基本上被编译成:

insert into t (datecol)
    values ('1900-01-01');

你能做什么?最明显的是不插入空白值。您要插入NULL,所以插入NULL。在这种情况下,您可以使用NULLIF()

insert into t (datecol)
    values (nullif('', ''));

这会将输入转换为适当的值。

第二种选择是使用检查约束拒绝此类值:

alter table t add constraint chk_t_datecol
    check (date >= '1950-01-01');

也就是说,日期在可接受的范围内。

第三个选择是添加一个触发器,以在输入时将'1900-01-01'转换为NULL值。

第四个选择是允许这些值,但将计算列用作参考:

alter table t add datecol_good as ( nullif(datecol, '1900-01-01'));

所有这些选项均假设'1900-01-01'不是您想要在数据中输入的有效日期。