我的应用程序中有一个输入字段,它接受通过日期选择器显示的日期。有时用户没有选择任何日期,他们可能会提交空白(客户要求),因为这不是必填字段。
空白提交后,存储在SQL Server 2008数据库中的数据将为'1900-01-01'。相反,我需要将数据存储为'NULL'或'empty'或'0000-00-00',但不需要任何其他有效的日期格式。
如果request.getparameter()
为空,我试图插入'0000-00-00'。但这正在停止插入。
我的目的是在用户提交空白字段时插入“ NULL”或“-”或“ 0000-00-00”。而不是“ 1900-01-01”。
答案 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'
不是您想要在数据中输入的有效日期。