我有一个TIMESTAMP
包含数据的字段:13-09-16 23:56:00.000000000 AMERICA/NEW_YORK
我将这些数据从 Java 采购到 Calendar 对象中,年份表示为0013
. SQL 开发人员还表示使用to_char(order_date,'YYYY-MM-DD')
as运行时的日期0013
。
为什么?
'RR' 或 'RRRR' - 年份格式
'RR' 让您仅使用两位数将 20 世纪的日期存储在 21 世纪。另请参阅:Oracle 数据库 SQL 参考中有关 RR 日期时间格式元素的其他讨论
'RRRR' 全年。接受 4 位或 2 位输入。如果是 2 位数,则提供与 RR 相同的回报。如果您不想要此功能,请输入 4 位数年份。
Oracle® 数据库 SQL 快速参考 10g 第 2 版 (10.2) B14195-01
您的字段格式不正确,应该是2013-09-16 23:56:00.000000000
. 如果您将其存储在 SQL Timestamp 列中,数据库应自动更正此(或将其更改为0013-09-16 23:56:00.000000000
)。
SQL 开发人员和 Java 中您获得 0013 的原因是因为您请求格式为四位数年份YYYY
,而值是两位数年份。您需要指定YY
才能获得两位数。
但是,问题的核心是您的时间戳未正确存储。
我知道这已经过时了,但我想我会添加我的解决方案,因为 TO_CHAR 函数从未对我有用。
使用
TO_DATE(yourDateField,'DateFormat')
这应该把它放在正确的格式。
如果 SQL 返回to_char(order_date,'YYYY-MM-DD')
为0013-nn-nn
,这意味着年份实际上是公元 13 年,因此它正确显示为0013
。
我认为你必须改变模式:
to_char(order_date,'YY-MM-DD')
YYYY 是四个编号的年份
YY 应该可以使用两位数的年份(可能会显示为 1913 而不是 2013)