SQLCODE -181日期时间值的字符串表示是不是一个有效日期时间值(SQLCODE -181 T

2019-10-19 23:24发布

我得到“日期时间值的字符串表示是不是一个有效日期时间值”的时候,我给0001-01-01 00:00:00.000000对时间戳字段从输入。 但是,当我改变00010002给出0002-01-01 00:00:00.000000从输入时间戳字段,我的代码是没有任何错误做工精细。 为什么会这样? 将使用Java是支持0001-01-01 00:00:00.000000对时间戳值?

我使用DB2作为我的数据库。

Answer 1:

在DB2中,SQLCODE SQL0181意味着,给定表示无效

db2 ? sql0181

然而,当我在DB2写你的日期,它接受它:

db2 "values timestamp('0001-01-01 00:00:00.000000')"

1
--------------------------
0001-01-01 00:00:00.000000

  1 record(s) selected.

然而,当我把一个无效的日期,如13个月,它返回你的错误代码

db2 "values timestamp('0001-13-01 00:00:00.000000')"

1
--------------------------
SQL0181N  The string representation of a datetime value is out of range.

我觉得你有那不符合所提供的日期时间区域和区域设置的问题。

运行此命令,然后开始修改日期

db2 "values current timestamp"

表6.日期时间限制

  • 最小TIMESTAMP值0001-01-01-00.00.00.000000000000
  • 最大TIMESTAMP值9999-12-31-24.00.00.000000000000

http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0001029.html



Answer 2:

有相关的时间戳值的记录的行为0001-01-01 00:00:00.000000 (以及为9999-12-31-24.00.00.000000000000在JDBC / SQLJ用于DB2)。 没有足够的人知道查询本身,即提交查询,列属性的代码中,DB2版本,也不是平台来告诉它如何可能适用于这种情况。

查看使用了PreparedStatement.setTimestamp的设置在TIMESTAMP WITH值TIME ZONE列在DB2 z / OS版信息中心主题,并注意同特定的时间戳值的说明。 主题是关于驱动程序如何处理这些价值,虽然它并没有真正提供多少内部细节。 我怀疑司机正在对查询的微小变化,因为它不知道在服务器的确切数据类型。

但是也有一些可能的相关数据类型。 该驱动程序可能基于一个假设,即给出了意想不到的结果稍有不当SQLDA。

这可能是更具体的搜索可以找到更多的信息,但我不知道实际的“答案”会不知道了很多关于驱动程序的内部找到。 有可能会发现任何根据版本等的JDBC / SQLJ驱动程序非常相似条件。如果这种情况不完全了解PreparedStatement.setTimestamp ,它可能并不重要。 肯定有很多使用通用代码相关的类/方法。



Answer 3:

问题是我使用它的JDK版本,。 在JDK 1.7时间戳0001-01-01 00.00.00.000000不支持默认情况下,我改变了我的JDK从1.7到1.6,跑了我的程序,这个问题得到了解决。

如果要使用JDK 1.7,那么默认的时间戳应该是0002-01-01 00:00:00.000000 。 在JDK 1.6的情况下,默认timesatmp为0001-01-01 00:00:00.000000



文章来源: SQLCODE -181 THE STRING REPRESENTATION OF A DATETIME VALUE IS NOT A VALID DATETIME VALUE