从Oracle返回的年份值错误地显示为0013

时间:2013-10-23 19:57:51

标签: java oracle

我有一个TIMESTAMP字段,其中包含数据:13-09-16 23:56:00.000000000 AMERICA/NEW_YORK

我从Java将这些数据转换为Calendar对象,年份表示为0013。 SQL开发人员还使用to_char(order_date,'YYYY-MM-DD')作为0013来表示运行的日期。

为什么呢?

5 个答案:

答案 0 :(得分:2)

'RR'或'RRRR' - 年份格式

'RR'让您只用两位数即可存储21世纪的20世纪日期。 另请参阅:Oracle中有关RR datetime format元素的其他讨论 数据库SQL参考

'RRRR'回合年。接受4位或2位输入。如果是2位数,则提供相同的数字 作为RR返回。如果您不想要此功能,请输入4位数年份。

Oracle®数据库 SQL快速参考 10g第2版(10.2) B14195-01

答案 1 :(得分:1)

您的字段格式不正确,应为2013-09-16 23:56:00.000000000。如果要将其存储在SQL时间戳列中,则数据库应自动更正此值(或者将其更改为0013-09-16 23:56:00.000000000)。

SQL开发人员和Java中您获得0013的原因是因为您要求格式为四位数年份YYYY,当值为两位数年份时。您需要指定YY才能获得两位数。

问题的核心是,你的时间戳没有正确存储。

答案 2 :(得分:1)

我知道这已经过时了,但我想我会添加我的解决方案,因为TO_CHAR函数对我来说从未起作用。

使用     TO_DATE(yourDateField,'DateFormat')

这应该以正确的格式。

答案 3 :(得分:0)

我认为你必须改变模式:

to_char(order_date,'YY-MM-DD')

YYYY为四年编号

YY应该用两位数工作多年(可能会显示为1913年而不是2013年)

答案 4 :(得分:0)

如果SQL将to_char(order_date,'YYYY-MM-DD')作为0013-nn-nn返回,则表示年份实际上是年份13AD,因此它正确显示0013