#sql #postgresql #datetime #bigint
#sql #postgresql #datetime #bigint
Вопрос:
Я пытаюсь преобразовать значение bigint в дату в PostgreSQL
Я использую приведенный ниже код
SELECT TO_CHAR(TO_TIMESTAMP(1564983632051/ 1000),
'YYYY-MM-DD HH24:MI:SS')
затем оно возвращается 2019-08-05 07:40:32
, что правильно.
Однако я хочу добавить к нему несколько часов, чтобы получить местное время. Пытался выполнить следующий запрос, но он выдает ошибку :
SELECT TO_CHAR(TO_CHAR(TO_TIMESTAMP(1564983632051/ 1000),
'YYYY-MM-DD HH24:MI:SS') INTERVAL '4 hour')
Я не хочу использовать отдельный запрос, если это так, я могу использовать
выберите (to_timestamp(‘2019-08-05 07:40:32’, ‘ ГГГГ-ММ-ДД HH24:MI:SS.US ‘) интервал ‘4 часа’):: отметка времени;
это вернет желаемый результат.
Мне нужно как преобразование, так и добавление часов в одном запросе.
Комментарии:
1. Это было бы намного проще, если бы вы сохранили свою временную метку в
timestamp
столбце.
Ответ №1:
Вы должны добавлять к TIMESTAMP
части, а не к части, приведенной к CHAR
:
SELECT TO_CHAR(
TO_TIMESTAMP(1564983632051/ 1000) INTERVAL '4 hour',
'YYYY-MM-DD HH24:MI:SS'
)
Ответ №2:
Проблема здесь:
select pg_typeof(TO_CHAR(TO_TIMESTAMP(1564983632051/ 1000), 'YYYY-MM-DD HH24:MI:SS'));
pg_typeof
-----------
text
Добавление interval
к текстовому значению не сработает.
Итак, что-то вроде:
select TO_CHAR(TO_TIMESTAMP(1564983632051/1000) interval '4 hour', 'YYYY-MM-DD HH24:MI:SS') ;
to_char
---------------------
2019-08-05 02:40:32
Лучше всего оставаться в типе для операций до самого конца. Затем примените форматирование.