Как преобразовать поле даты в ORACLE во время ZULU с помощью предоставленного поля часового пояса? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь преобразовать поле даты в зулусское время.Данные довольно просты: номер отслеживания, время (которое является датой), часовой пояс и почтовый индекс.Есть ли способ, которым я могу вернуть время как зулусское время?Пока что все, что я пробовал, оказалось бесплодным.

1 Ответ

0 голосов
/ 20 сентября 2019

Сначала вы должны прикрепить часовой пояс к значению даты.Затем вы можете конвертировать его в UTC (то же самое, что и "зулу").За пределами США существует мир, который можно объединять с помощью постоянной строки.Если возможно, я бы порекомендовал перенести значения CUST_TIMEZONE на действительные имена часовых поясов, как указано в SELECT TZNAME FROM V$TIMEZONE_NAMES

. В принципе вам необходимо выполнить следующее:

FROM_TZ(ORDER_DTTM, 'US/'||CUST_TIMEZONE) AT TIME ZONE 'UTC'

Однако FROM_TZ ожидает значение TIMESTAMP вместо DATE, и Oracle не выполняет неявное приведение, поэтому вам нужно запустить

FROM_TZ(CAST(ORDER_DTTM AS TIMESTAMP), 'US/'||CUST_TIMEZONE) AT TIME ZONE 'UTC'

В результате получается значение TIMESTAMP WITH TIME ZONE.Если вы хотите получить DATE, вам придется снова привести результат:

CAST(FROM_TZ(CAST(ORDER_DTTM AS TIMESTAMP), 'US/'||CUST_TIMEZONE) AT TIME ZONE 'UTC' AS DATE)

Если вы конвертируете метку времени в UTC, вы также можете использовать встроенную функцию, она возвращает TIMESTAMP значение:

SYS_EXTRACT_UTC(FROM_TZ(CAST(ORDER_DTTM AS TIMESTAMP), 'US/'||CUST_TIMEZONE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...