SAP HANA-处理日期数据类型的问题

问题描述 投票:1回答:3

我正在使用SAP HANA,我需要对日期做一些事情(主要是增加几天)。

我在每年的特定日期(5月的第二个星期六)工作时遇到问题。我的猜测是,这与夏令时有关。

我简化了查询以显示问题。

DO
BEGIN
    DECLARE FECHA VARCHAR(20) = '2020-05-10';

    SELECT :FECHA AS D1
         , TO_DATE(:FECHA) AS D2
         , TO_VARCHAR(TO_DATE(:FECHA)) AS D3
      FROM DUMMY;
END;

作为结果,我得到的是:

|------------|-------------|------------------------|------------|
|    D1      |      D2     |           D3           |     D4     |
|------------|-------------|------------------------|------------|
| 2020-05-10 | 09-may-2020 | 09-may-2020 23:00:00.0 | 2020-05-10 |
|------------|-------------|------------------------|------------|

这会增加我遇到的日子时会引起各种各样的问题。但是,仅此简单示例就足够了。

感谢您的建议。

java jdbc hana
3个回答
1
投票

Mikel Rychliski的回答几乎是正确的。

[正如我几年前在博客文章Trouble with time?中解释的那样,SAP HANA Studio是一个JAVA应用程序,它使用java.sql.Date / java.sql.Timestamp对象来处理日期/时间戳信息。要使用它们,必须配置Calendar

没有进一步的配置(即提到的JVM参数-Duser.timezone),JVM使用其default时区设置。

引用我的帖子:

如果JVM在Linux上运行,那将再次是TZ的值,在MS上Windows,这将是Windows用户的当前时区设置运行JVM。

如果您要使自己确信SAP HANA中的数据是正确的,则使用基于非JDBC的连接是一种简便的方法。

例如,只需通过hdbsql或ODBC客户端运行代码。


0
投票

我认为问题出在Hana Studio,因为在DBeave中,它按预期运行:P如果有人需要知道如何解决此问题,我将在此留下这个问题。

我将尝试在Hana Studio中找到一种解决方法,然后回发。


0
投票

HANA Studio(和所有其他JDBC应用程序)假定数据库中存储的DATE为UTC。这些值在获取时将转换为客户端的本地时区。

在您自己的JDBC应用程序中,可以在getDate()调用上传递Calendar对象,以指定要将服务器值转换为哪个时区。

HANA Studio取决于JVM时区设置,默认情况下是从OS读取的。为了避免在HANA Studio中出现此问题,您可以在hdbstudio.ini文件中添加JVM属性-Duser.timezone=UTC(或更改计算机上的时区)。

© www.soinside.com 2019 - 2024. All rights reserved.