6

我有 ASP 经典页面在表中插入记录。我正在为 5 个字段使用表单元素,即。[ABC] ([code], [updatedate], [flag], [Mfdate]。当用户没有选择 Mdate 时,使用日期控件获取用户在 Mdate 中选择的日期,它在我的 ASP 中形成的查询页面如下

INSERT INTO [ABC] ([code], [updatedate], [flag], [Mfdate]) 
VALUES('203 ', '6/12/2013', 'N/A', '')

当它在 SQL Server 中运行时,它正在插入日期1/1/1900Mfdate但用户没有选择任何值。

为什么会这样?

的数据类型Mfdatedatetime

4

2 回答 2

15

您没有将其设为 null,您正在尝试插入一个空字符串 ( '')。你需要:

INSERT INTO [ABC] ([code],[updatedate],[flag],[Mfdate]) 
VALUES ('203', '6/12/2013','N/A', NULL) 

虽然真的,如果你要插入日期,最好以 YYYYMMDD 格式插入它们,如:

INSERT INTO [ABC] ([code],[updatedate],[flag],[Mfdate]) 
VALUES ('203', '20130612','N/A', NULL) 
于 2013-06-12T16:42:46.470 回答
10

SQL Server 日历的纪元或零点是 1900 年 1 月 1 日的一天开始 (00:00:00.000)。

a 的内部表示datetime由 2 个 32 位有符号整数组成。高位整数为纪元以来的天数县;低位整数是自一天开始以来的毫秒数。任何导致datetime值的表示为零的事物,例如:

select convert(datetime,0)
select convert(datetime,'')
select convert(datetime,0x0000000000000000)

将产生 的时代datetime价值1 January 1900 00:00:00.000

null然而,A被转换为……好吧…… null,因为 SQL 标准要求任何涉及 a 的表达式或测试(除了使用must 本身null的显式测试无效性之外)评估为.is [not] nullnull

OTOH,如果您将 SQL Server 的选项设置为null几乎可以互换地处理和 nil 字符串,那么您很可能会以纪元日期结束。

于 2013-06-12T17:24:09.363 回答