Как обрабатывать имена TZ в Sybase IQ 16

В контексте файлового процесса ETL (простая оболочка + BCP во временную таблицу + хранимая процедура импорта в конечную таблицу) возникла новая сложность с импортом данных из удаленной базы данных Oracle в базу данных Sybase IQ 16.

Импортируемые данные имеют отметку времени ( YYYY-MM-DD HH:MI:SS) без часового пояса и дополнительного поля с названием ТЗ (например, Europe/Zurich). Вся информация должна храниться в формате UTC+0.

Oracle имеет специальную функцию TimeZone TO_TIMESTAMP_TZкоторому нет совпадений в базе данных IQ. Более простое решение, которое я вижу, состояло бы в том, чтобы источник отправлял временную метку с часовым поясом. А затем используйте SWITCHOFFSETфункция. Но у меня ограниченное влияние на изменение формата исходной системы.

Пример Sybase IQ изменения смещения временной метки с часовым поясом:

      SELECT CAST ( '2022-02-18 14:45:12.123+01:00' AS datetimeoffset ) AS dt_originalTZ, SWITCHOFFSET( dt_originalTZ,'+00:00' ) AS dt_destinationTZ;
--dt_originalTZ,dt_destinationTZ
--'2022-02-18 14:45:12.123+01:00','2022-02-18 13:45:12.123+00:00

Время/бюджет ограничены, я не думаю, что на стороне базы данных IQ было бы целесообразно создать новую пользовательскую функцию для сопоставления всех возможных имен TZ со смещениями. Эта альтернативная основная сложность будет связана с переходом на летнее время.

Я также не хочу создавать взломанное решение, зависящее, скажем, от оболочки на Linux-сервере, преобразующей входной файл, поскольку это создаст более частные случаи с большим количеством возможных точек сбоя и большим количеством зависимостей для управления.

Я пропустил какой-либо более простой подход, который мог бы спасти положение?

0 ответов

Другие вопросы по тегам