我使用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
有人可以帮我解决这个问题吗?
答案 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')