Как получить значение UTC для SYSDATE в Oracle - PullRequest
38 голосов
/ 21 июля 2009

Вероятно, классический ... Не могли бы вы узнать, как легко получить значение UTC для SYSDATE в Oracle (лучше всего было бы также поработать над 8-й версией).

Пока у меня есть пользовательская функция: (

Приветствия

Stefan

Ответы [ 5 ]

38 голосов
/ 21 июля 2009

Вы можете использовать

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -02:00') FROM DUAL;

Вам также может понадобиться изменить часовой пояс

ALTER SESSION SET TIME_ZONE = 'Europe/Berlin';

Или прочитайте

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM dual;
36 голосов
/ 21 июля 2009
select sys_extract_utc(systimestamp) from dual;

Однако в Oracle 8 работать не будет.

19 голосов
/ 25 июля 2013

Обычно я работаю со столбцами DATE, а не с большим, но более точным TIMESTAMP.

Следующее вернет текущую дату UTC, как только это - ДАТА.

CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)

Работа с датами UTC - это здорово, потому что мне не нужно беспокоиться о сложности часовых поясов. Смещения или другие проблемы требуются только для окончательного отображения пользователю.

4 голосов
/ 29 августа 2017

Если вы хотите использовать временную метку вместо даты с sysdate, вы можете указать часовой пояс с помощью systimestamp:

select systimestamp at time zone 'UTC' from dual

выходы: 29-AUG-17 06.51.14.781998000 PM UTC

2 голосов
/ 16 апреля 2018

Я использую:

SELECT CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) FROM DUAL;

У меня все нормально работает.

...