PostgreSQL вводит значение BigInt в DateTime и добавляет часы, чтобы получить местное время

#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
  

Лучше всего оставаться в типе для операций до самого конца. Затем примените форматирование.