【发布时间】:2013-01-21 09:18:42
【问题描述】:
我有日期,早于第 0 年。我需要将它们转换为 AD 日期并再增加 1 年。例如我有BC 16.2.2011 并想要AD 16.2.2012。
我们有一个第 3 端 Java 应用程序,其中有时会发生错误;它错误地保存了日期。在上面的示例中,它应该保存 16.2.2012,但在 DB 中,它是 -16.2.2011(它“小了一年”,因为 Oracle 没有零年 - 这很重要)。
转换这些日期很容易,但问题是保存日期应该是29.2.2012,因为没有-29.2.2011。而不是这个日期,它保存-1.3.2011,我无法轻松转换。
有什么方法可以正确转换日期吗?比如从数据库中的转储数据中获取起始年份的秒数?
【问题讨论】:
-
实际上 IIRC 没有零年,所以 Oracle 在这里是正确的。想想看,人类喜欢从 1 开始数。当然这对你的问题没有帮助。
-
你为什么用 PL/SQL 标记这个?你需要一个存储过程吗?
-
我没有弄错
problem is when saved date should be like 29.2.2012 because there is no -29.2.2011, so instead of this date it saves -1.3.2011.部分。在这种情况下您不想增加一天? -
无效日期是如何存储的 - 你能添加一个
dump的值,尤其是有问题的值吗?从描述看来,应用程序在插入期间破坏了数据,这可能是 JDBC 错误 - 即使您无法修复应用程序,如果以后的 JDBC 驱动程序仍然有效,它可能会消除该问题,也许?跨度> -
我将其标记为 plsql,因为我想编写将日期更正为正确日期的触发器 :) 我无法在 Java 应用程序中进行任何修改,包括更改 JDBC 驱动程序。我只能在 DB 中进行修改。