首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLCODE -181日期时间值的字符串表示形式不是有效的日期时间值

SQLCODE -181日期时间值的字符串表示形式不是有效的日期时间值
EN

Stack Overflow用户
提问于 2014-04-23 18:46:52
回答 3查看 20K关注 0票数 1

当我从输入中给出时间戳字段的0001-01-01 00:00:00.000000时,我得到了“THE STRING REPRESENTATION OF A DATETIME IS NOT A VALID DATETIME”。但是,当我将输入中的时间戳字段的0001更改为0002 (作为0002-01-01 00:00:00.000000 )时,我的代码工作正常,没有任何错误。为什么会这样呢?java不支持时间戳的0001-01-01 00:00:00.000000值吗?

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

EN

回答 3

Stack Overflow用户

发布于 2014-04-23 20:31:13

在DB2中,SQLCODE SQL0181表示给定的表示无效

代码语言:javascript
运行
复制
db2 ? sql0181

但是,当我在DB2中写入您的日期时,它会接受它:

代码语言:javascript
运行
复制
db2 "values timestamp('0001-01-01 00:00:00.000000')"

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

  1 record(s) selected.

但是,当我放入一个无效的日期时,比如13个月,它会返回错误代码

代码语言:javascript
运行
复制
db2 "values timestamp('0001-13-01 00:00:00.000000')"

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

我认为您有一个与提供的日期时间不对应的区域设置和区域设置的问题。

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

代码语言:javascript
运行
复制
db2 "values current timestamp"

表6. Datetime限制

0001-01-01-00.00.00.000000000000

  • Largest时间戳值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

票数 2
EN

Stack Overflow用户

发布于 2014-07-01 15:45:44

问题出在我使用的JDK版本上。在JDK 1.7中,不支持默认的时间戳0001-01-01 00.00.00.000000,我将JDK从1.7改为1.6,然后运行我的程序,这个问题得到了解决。

如果想使用JDK1.7,那么默认的时间戳应该是0002-01-01 00:00:00.000000。在JDK1.6中,缺省的timesatmp是0001-01-01 00:00:00.000000

票数 2
EN

Stack Overflow用户

发布于 2014-04-24 20:28:48

在JDBC/SQLJ DB2中,有一个与时间戳值0001-01-01 00:00:00.000000 (以及9999-12-31-24.00.00.000000000000)相关的有文档记录的行为。对于查询本身、提交查询的代码、列属性、DB2版本或平台,我们了解的还不够多,无法知道它在这种情况下可能如何应用。

查看DB2 for z/OS信息中心中的Use of PreparedStatement.setTimestamp to set values in TIMESTAMP WITH TIME ZONE columns主题,并注意与特定时间戳值相关的描述。本文的主题是关于驱动程序如何处理这些值,尽管它并没有给出太多内部细节。我怀疑驱动程序对查询进行了细微的更改,因为它不知道服务器上的确切数据类型。

有一些相关的数据类型是可能的。驱动程序可能会基于给出意外结果的假设生成稍微不合适的SQLDA。

很可能更具体的搜索可以找到更多的信息,但我不知道在不了解更多关于驱动程序内部结构的情况下,是否会找到真正的“答案”。根据版本的不同,任何JDBC/SQLJ驱动程序都可能会出现非常相似的情况。如果这种情况与PreparedStatement.setTimestamp无关,那可能也没什么关系。必然会有相关的类/方法使用公共代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23242000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档