2013-07-23 41 views
0

为什么DB2在日期字段中写入01/01/0001时,我将其设置为空?我可以在DB2中将日期字段设置为空

我可以将该字段设置为NULL。当db2将它设置为01/01/0001时,我的ado记录集爆炸,因为它不是有效的日期。

我做错了什么?

+2

您正在使用哪个版本的DB2?只要日期字段可以为空,您可以将日期字段设置为空。 –

+0

该字段可能被定义为“不为空” –

回答

1

您当然可以将日期列设置为NULL值。 怎么办?

您使用的客户端正在与您搞砸,或者表中有一个触发器,将该列中的NULL值更改为您所看到的值。

0
  1. 是的,你可以将空值插入日期列。下面是插入空值的语法(取决于版本)。时间戳是列类型,因此您可以使用日期进行交换。根据你的DB2版本,你可能有不同的方法来完成它。如果datetime字段的字段规范未设置为允许空值,这将不起作用。

    INSERT INTO表名(COL1,COL2,COL3)选择值1,值, CAST(NULL作为时间戳)FROM [源表]

  2. 你看到01/01/0001原因是因为DB2试图将null转换为值,而01/01/0001是日期字段的默认值。

+1

呃,没有。如果他得到**错误**,则不会在表中插入_anything_。虽然这是插入空值的正确语法,但听起来并不像他的实际问题(即,如果它是从ORM插入的,通常需要处理该转换)。某些版本的DB2也无法隐式地投射/比较日期和时间戳(!) - 可能会避免本地时间和全球时间的问题;如果你指定时间戳,为什么不反对呢?我们应该获得更多信息,但评论可能是正确的 - “定义为NOT NULL”。 –

+0

@ Clockwork-Muse你不知道他的SQL产生错误的确切原因,因为他没有提供他正在使用的东西。我只是回答了他的问题,这取决于他的DB2/AS400版本将工作得很好。我也更新了我的答案,以完全回答他的所有问题。 – Mike

相关问题