Как получить значение UTC для SYSDATE в Oracle
Вопрос
Наверное, классика...Знаете ли вы простой способ получить значение SYSDATE в формате UTC в Oracle (лучше всего было бы заставить что-то работать и в 8-й версии).
На данный момент у меня есть пользовательская функция :(
Ваше здоровье,
Стефан
Решение
Вы можете использовать
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;
Другие советы
select sys_extract_utc(systimestamp) from dual;
Однако не будет работать на Oracle 8.
Обычно я работаю со столбцами DATE, а не с более крупными, но более точными столбцами TIMESTAMP.
Следующее вернет текущую дату UTC как просто ДАТУ.
CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)
Работать с датами в формате UTC очень удобно, поскольку мне не нужно беспокоиться о сложности часовых поясов.Только окончательное отображение пользователю требует смещений или других проблем.
Если вам нужна метка времени, а не просто дата с помощью sysdate, вы можете указать часовой пояс с помощью systimestamp:
select systimestamp at time zone 'UTC' from dual
выходы: 29-AUG-17 06.51.14.781998000 PM UTC
Я использую:
SELECT CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) FROM DUAL;
У меня это работает нормально.