我的应用程序中有一个输入字段,该字段接受日期至日期选择器。有时用户不会选择任何日期,并且可能会提交空白(客户端要求(,因为这不是强制性字段。
空白提交后一次存储在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'
不是您在数据中想要的有效日期。