SAP HANA - проблема с обработкой даты-типа - PullRequest
1 голос
/ 15 апреля 2020

Я использую SAP HANA и мне нужно кое-что сделать с датами (в основном, добавить дни).

У меня проблема с определенным днем ​​года, второй субботой мая. Я предполагаю, что это связано с переходом на летнее время.

Я упрощаю запрос, чтобы показать проблему.

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 |
|------------|-------------|------------------------|------------|

Это вызывает всевозможные проблемы при добавлении дней, с чем я сталкиваюсь. Но только этот простой пример показывает более чем достаточно.

Заранее благодарим за ваши предложения.

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Mikel Rychliski почти прав в своем ответе.

Как я объяснил в блоге Проблемы со временем? Несколько лет спустя go, SAP HANA Studio - JAVA приложение, которое использует java.sql.Date / java.sql.Timestamp объекты для обработки информации о дате / времени. И чтобы их использовать, необходимо настроить Calendar.

Без дальнейшей настройки (т. Е. Упомянутый параметр JVM -Duser.timezone) JVM использует настройку часового пояса по умолчанию .

Цитата из моего сообщения:

Если JVM работает на Linux, это снова будет значение TZ, на MS Windows это будет текущая настройка часового пояса для Windows пользователя, который запускает JVM.

Если вы хотите убедиться, что данные в SAP HANA верны, использовать соединение не на основе JDB C - это простой способ сделать это.

Например, просто запустите ваш код через hdbsql или клиента ODB C.

0 голосов
/ 15 апреля 2020

HANA Studio (и все другие приложения JDB C) предполагают, что DATE хранится в базе данных UT C. Эти значения преобразуются в местный часовой пояс клиента при получении.

В вашем собственном приложении JDB C вы можете передать объект Calendar в вызове getDate (), чтобы указать, какой часовой пояс вы хотели бы значение сервера, преобразованное в.

HANA Studio, зависит от настройки часового пояса JVM, которая по умолчанию считывается из ОС. Чтобы избежать этой проблемы в HANA Studio, вы можете добавить свойство JVM -Duser.timezone=UTC в файл hdbstudio.ini (или изменить часовой пояс на вашем компьютере).

0 голосов
/ 15 апреля 2020

Я думаю, что проблема в Hana Studio, поскольку в DBeave она работает как положено: PI оставляет этот вопрос здесь на тот случай, если кому-то еще нужно знать, как это исправить.

Я постараюсь найти способ исправить это в Hana Studio и отправить обратно.

...