JOOQ问题:AM / A.M.或PM / P.M。需要

时间:2016-08-30 10:18:13

标签: java sql oracle jooq

我使用JOOQ 3.4.1作为中间件与Oracle数据库进行通信,但当我在代码中编写下面的查询时,我得到了 SqlDataException:AM / A.M。或PM / P.M。必需的。

select 0 prodid, cast(((cast('31-DEC-' as varchar2(4000)) || cast(YearForBilling as varchar2(4000))) || ' 12.59.00.000000000 PM ') as timestamp) theDate  0 Balance from ProductDetails where productRSN = 71 
group by YearForBilling

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

始终尝试避免使用本地日期时间格式

我永远不会依赖依赖于语言环境的格式化日期和时间戳字符串。的 从不 即可。您永远不知道这些设置是否会在某个时间点发生变化,例如作为系统默认,或作为会话设置等。不要依赖它。的 唐'吨

如果可以,请使用完全不依赖于NLS设置(I've blogged about this here)的SQL标准时间戳文字。例如:

TIMESTAMP '2016-12-31 23:59:00.0'

在您的情况下,您可以动态创建日期,因此时间戳文字无法正常工作。但是,请使用ISO 8601 date formatting, as such

TO_TIMESTAMP(YearForBilling || '-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS')

TO_TIMESTAMP() function is described here