【问题标题】:Teradata JDBC 16.20 returns wrong date in DatagripTeradata JDBC 16.20 在 Datagrip 中返回错误的日期
【发布时间】:2018-07-16 01:56:37
【问题描述】:

我在 Datagrip 中使用 Teradata JDBC 16.20。 每当我尝试对日期做任何事情时,它都会少返回 1 天。 例如:SELECT date'2017-08-01' 在 Datagrip 中返回 2017-07-31,在 Teradata SQL 助手中正确返回 01/08/2017

有人知道为什么吗?

【问题讨论】:

  • 如果有帮助,这一定是 Datagrip 问题。我刚刚通过 JDBC 16.20 驱动程序对我的 15.10 数据库运行 SELECT date'2017-08-01',它按预期返回。
  • 可能基于不同的时区。 SELECT CAST (date'2017-08-01' AS TIMESTAMP AT LOCAL), CAST (date'2017-08-01' AS TIMESTAMP AT 0)
  • @dnoeth 似乎有效。非常感谢
  • @dnoeth:如果我将日期转换为 TIMESTAMP,则效果很好,但如果我只是将 DATE 或 CAST TIMESTAMP 作为 DATE 返回,则返回时间会减少 1 天。

标签: sql teradata datagrip teradata-sql-assistant


【解决方案1】:

我们在使用带有 Vertica 数据库的 DataGrip 时遇到了同样的问题。我的预感是日期被转移了两次。当我选择 current_timestamp(在 Vertica 上是带时区的时间戳)时,日期是正确的(通常比当前日期早一天),但是当我选择 current_date 时,我得到前一天(我的时区是美国/太平洋)。我认为正在发生的是 JDBC 驱动程序正在根据两个时区调整日期,然后 DataGrip 正在第二次调整它。

使用相同的 Vertica 数据库和相同的 JDBC 驱动程序,但使用不同的 SQL 客户端 (DbVisualizer) 没有问题。

我可以使用 DataGrip 提供的唯一解决方法是安装一个更旧的版本。 DataGrip 2016.3.4,Build #DB-163.13906.13,于 2017 年 2 月 21 日构建,似乎可以正确处理日期列。

【讨论】:

  • 这就是我没有从2017.2.2升级的原因。我的新同事下载了更新的版本,必须处理这个问题。
【解决方案2】:

在 VM 选项中添加-Duser.timezone=UTC 似乎可以解决问题。

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 2019-11-29
    • 2014-04-08
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多