Как отформатировать поле bigint в дату в Postgresql? - PullRequest
42 голосов
/ 30 марта 2011

У меня есть таблица с полем типа bigint.В этом поле хранится метка времени.Я хочу форматировать поле даты следующим образом:

to_char( bigint_field,'DD/MM/YYYY HH24:MI:SS')

Я получаю следующую ошибку:

ERROR: multiple decimal points
État SQL :42601

Ответы [ 3 ]

76 голосов
/ 30 марта 2011
TO_CHAR(TO_TIMESTAMP(bigint_field / 1000), 'DD/MM/YYYY HH24:MI:SS')
3 голосов
/ 22 августа 2012

Это зависит от того, что представляет значение bigint - смещение времени эпохи или нет.

select to_timestamp(20120822193532::text, 'YYYYMMDDHH24MISS')

возвращает

"2012-08-22 19:35:32+00 "

2 голосов
/ 06 января 2017

Я сделал это так:

to_timestamp(to_char(20120822193532, '9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS')

результат выглядит так:

2012-08-22 19: 35: 32

вы также можете использовать это в выборе statemant, просто обменяйте номер с колонкой базы данных.

Пошаговое объяснение:

to_char(20120822193532, '9999-99-99 99:99:99')

Это создаст строку, подобную этой:

"2012-08-22 19:35:32"

теперь мы можем легко преобразовать это в метку времени:

to_timestamp('2012-08-22 19:35:32','YYYY-MM-DD HH24:MI:SS')

Результат будет выглядеть так же, как и раньше, но теперь это отметка времени.

Кроме того, если вы используете это для такой команды, как

CREATE TABLE table2 AS SELECT to_timestamp(to_char(tb1.date, '9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS') AS realDate FROM table1 AS tb1; 

вы можете получить timstamptz (отметка времени с часовым поясом) вместо отметка времени (отметка времени без часовой пояс). Вы можете изменить это так:

ALTER TABLE table2 ALTER realDate SET DATA TYPE timestamp USING realDate;
...