2017-02-01 7 views
2

У меня есть даты в базе данных postgres. Проблема в том, что они хранятся в строковом поле и имеют значения, похожие на: «1187222400000» (что соответствовало 07.08.2007). Я хотел бы преобразовать их в удобочитаемые даты с помощью некоторого выражения SQL to_date() или чего-то подобного, но не может найти правильного синтаксиса, чтобы заставить его работать.Преобразование строки временной метки в дату

+0

Можете ли вы предоставить второе значение с его связанной датой? – Vic

+0

Может ли значение «1187222400000» выше соответствовать «2007-08-15 17:00:00», ? – Vic

+0

Это возможно. У меня есть те же данные в другой базе данных, где показана только дата, но вполне возможно, что d это есть также время – oddpodm

ответ

1

Здесь действительно недостаточно информации для заключения, поэтому я предлагаю эту «научную дикую задницу», чтобы решить вашу головоломку. :)

Это появляется это число UNIX 'время эпохи' в миллисекундах. Я покажу этот пример, как будто ваше поле строки имеет произвольное имя «epoch_milli». В PostgreSQL вы можете преобразовать его в штамп времени, используя эту инструкцию:

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + epoch_milli * INTERVAL '1 millisecond'; 

или с помощью этого built-in postgresql function:

ВЫБОР to_timestamp (epoch_milli/1000)

либо из них, на примере «1187222400000 », выдает результат

"2007-08-15 17:00:00-07" 

Вы можете сделать некоторые из ваших собственных слежки с достаточно несколько значений, выбранных по аналогии с этим:

SELECT to_timestamp(epoch_milli/1000)::DATE 
FROM (VALUES (1187222400000),(1194122400000)) AS val(epoch_milli); 

«Ну, болота, человек. Я просто хочу, дату «точки взяты

Просто отбрасывать метку времени на дату, чтобы сбросить лишние биты:..

SELECT to_timestamp(epoch_milli/1000)::DATE 

Конечно его можно, что это значение конверсии или по отношению к какой-либо другой значение, следовательно, запрос для второй примерной точки данных.

+0

Ответ. Благодарю. Фактически, работая в CARTO, похоже, есть несколько вещей, которые отличаются, но ваш to_timestamp() отправил меня в правильном направлении. Мне пришлось преобразовать сначала в biginteger, а затем в метку времени, но результат является идеальным: to_timestamp (NULLIF (date_field, '') :: bigint/1000) – oddpodm

Смежные вопросы