DATE列值差异

时间:2014-12-21 13:20:07

标签: sql oracle jdbc connection

我正在尝试执行一个查询,该查询在针对Oracle DB的DATE类型列上具有where子句。

条件读起来像

collectTime BETWEEN TO_DATE('2014-12-14 01:00:00','YYYY-MM-DD HH24:MI:SS') AND
                    TO_DATE('2014-12-14 03:40:00','YYYY-MM-DD HH24:MI:SS')

现在,如果我使用DriverManager getConnection方法获取连接对象并执行预准备语句,则输出看起来很好。也就是说,当我查看返回的collectTime列(它返回为java.sql.Timestamp)值时,我会看到传入的两个日期之间的值 - 示例2014-12-14 01:09:00

但是,如果通过JDBC数据源(在Weblogic中配置)获取连接对象,则与DATE列对应的列值会以不同方式返回。示例2014-12-13 17:09:00.0

我无法理解造成这种差异的原因。所有值似乎都可以通过特定时区进行调整。关于为什么会发生这种情况的任何见解?

我尝试将会话时区设置为UTC,但这并没有任何影响。

2 个答案:

答案 0 :(得分:0)

在您的查询中,根据您的喜好格式化日期。如果您不这样做,将使用Weblogic中定义的NLS_DATE格式或正在执行的任何地方返回日期。

完全控制日期返回方式的唯一方法是在查询中指定它,例如

select to_char(sysdate, 'dd-mon-yyyy') from dual; 

返回

21-DEC-2014

答案 1 :(得分:0)

这是一个讨论线程,讨论为Weblogic设置时区:link

它建议将以下内容放入setDomainEnv.cmd文件中,当然还有正确的时区偏移量。

设置JAVA_PROPERTIES = -Duser.timezone =" +05:30" %JAVA_PROPERTIES %% EXTRA_JAVA_PROPERTIES%