当用户输入为null时,如何停止SQL Server中默认日期格式1900-01-01的插入



我的应用程序中有一个输入字段,该字段接受日期至日期选择器。有时用户不会选择任何日期,并且可能会提交空白(客户端要求(,因为这不是强制性字段。

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

如果request.getparameter()是空的,我尝试插入'0000-00-00'。但它正在停止插入。

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

不幸的是,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'不是您在数据中想要的有效日期。

最新更新