У меня простой расчет, я вычитаю интервал из даты со временем:
select TO_DATE('2016-12-05 23:04:59', 'YYYY-MM-DD HH24:MI:SS') - to_dsinterval('00 0:05:00') from dual;
Работает нормально, результат: 2016-12-05 22:59:59
но с часовыми поясами работает некорректно, поэтому следующий подход решает проблему с часовым поясом. Я просто оборачиваю выражение с to_date() еще раз
select TO_DATE(
TO_DATE('2016-12-05 23:04:59', 'YYYY-MM-DD HH24:MI:SS') - to_dsinterval('00 0:05:00')) from dual;
но теперь он превращает время в нули. Результат должен быть: 2016-12-05 22:59:59, но фактический: 2016-12-05 00:00:00
Если я добавлю формат к внешнему to_date следующим образом:
select to_date( TO_DATE('2016-12-05 23:04:59', 'YYYY-MM-DD HH24:MI:SS') - to_dsinterval('00 0:05:00'), 'YYYY-MM-DD HH24:MI:SS') from dual;
Результат стал очень странным: 0005-12-16 00:00:00 Что я делаю не так?
to_date()
, и это не решает проблему с часовыми поясами. Если вам нужна какая-то операция с часовыми поясами, используйтеtimestamp at time zone
- person Kacper   schedule 05.12.2016