【问题标题】:DATE column values differenceDATE 列值差异
【发布时间】:2014-12-21 13:20:06
【问题描述】:

我正在尝试针对 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,但这没有任何影响。

【问题讨论】:

    标签: sql oracle jdbc connection


    【解决方案1】:

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

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

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

    返回

    2014 年 12 月 21 日

    【讨论】:

    • 您好,感谢您的 cmets。我得到了正确的格式,但值似乎发生了变化。如果我使用驱动程序管理器获取连接,我得到一行 0,.0092811717335474,0,.004306984591466606,2014-12-14 01:09:00.0 如果我通过 JDBC 数据源路由,我得到 0,.0092811717335474 ,0,.004306984591466606,2014-12-13 17:09:00.0。日期似乎提前了 8 小时。给定查询的所有行都会发生这种情况。
    • 啊,这不是您有问题的格式,而是结果本身。如果您将整个查询与表定义一起发布,可能会有所帮助。我猜仍然是不同环境之间 NLS 参数的差异。如果这是 Java 问题还是数据库问题,我深表歉意...
    【解决方案2】:

    这是一个讨论为 Weblogic 设置时区的讨论帖:link

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      相关资源
      最近更新 更多