我是Oracle的新手,一直在试图了解Oracle DATE类型的工作方式。
我有一个带有时区信息的Java Date对象。据我所知,Java Date对象被规范化为自1970年1月1日以来的毫秒数。然后,这个Date对象通过JDBC API保存到数据库中。准备好的语句如下所示:
ps.setTimestamp(index,new java.sql.Timestamp.Timestamp(date.getTime()));
这样做是为了捕获日期和时间信息。
与此索引对应的数据库列的类型为oracle DATE。当我将此java.sql.Timestamp.Timestamp对象值存储到Oracle DATE字段时,它是否存储规范化日期(自1970年1月1日以来的毫秒数)?因此,无论数据库位于哪个时区,存储在oracle DATE列中的数据都将是相同的规范化数据,对吗?
如果我要将where子句中的这个DATE列与SYSDATE进行比较,那么在完成比较时,SYSDATE也会被标准化。我不确定如何在oracle中进行比较,因为oracle服务器可能位于不同的时区。
提前致谢。
答案 0 :(得分:0)
两个DATE
值都将被标准化。
当我使用Jython进行简单的Oracle查询时:
rs = c.executeQuery("select sysdate from dual")
while (rs.next()):
print('%s' % (SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").format(rs.getTimestamp(1))))
我得到了:
2011-11-04 09:58:00 +0100
当我住在波兰时,我们有'+0100'时区。