2017-08-20 50 views
0

我想使用jdbc驱动程序获取时间戳列的值。下面的查询就像一个魅力:Oracle to_timestamp产生错误

to_char(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') update_date 

然而,不是TO_CHAR,我需要时间戳值,如果我用下面的查询中我选择statemnt,它给

OTA-01821-日期格式不被识别

错误。请有人帮忙吗?

to_timestamp(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') update_date 
+3

列'update_date'的数据类型是什么。如果它是'timestamp'(它看起来应该是这样),那么根本没有必要转换它。 –

+0

尝试'To_timestamp(To_char(update_date,'格式'),'格式')' – sagi

回答

2

错误的直接原因是格式掩码的TZR部分,它对于简单的时间戳无效。您既可以转换为一个时间戳与时区with a different function

to_timestamp_tz(update_date,'YYYY-MM-DD HH24:MI:SS.FF9 TZR') 

或省略时区:

to_timestamp(update_date,'YYYY-MM-DD HH24:MI:SS.FF9') 

但作为uodate_date已经是一个时间戳(以[本地]时区),在将该字符串显式转换回时间戳(带或不带时区)之前,您将使用your session's NLS_TIMESTAMP_TZ_FORMAT setting将其隐式转换为字符串。

最好这是没有意义的,但是如果你的NLS设置与你使用的显式格式不匹配,那么它会给出不同的错误或不正确的结果。

如果您想要Java中的时间戳值,则不要执行任何转换 - 只需选择原始的update_date列,然后使用JDBC getTimestamp()来检索它。

+0

谢谢!我的时间戳列的格式为UTC 17-07-14 08:40:47.000000000。我应该使用什么? –

+0

如果该列的数据类型是带有(可能为本地)时区的时间戳,那么它没有任何固有格式。你的客户正在使用你的NLS设置来显示它。你根本不需要转换它。 –