我有一个TIMESTAMP
字段,其中包含数据:13-09-16 23:56:00.000000000 AMERICA/NEW_YORK
我从Java将这些数据转换为Calendar对象,年份表示为0013
。 SQL开发人员还使用to_char(order_date,'YYYY-MM-DD')
作为0013
来表示运行的日期。
为什么呢?
答案 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
。