У меня есть даты в базе данных postgres. Проблема в том, что они хранятся в строковом поле и имеют значения, похожие на: «1187222400000» (что соответствовало 07.08.2007). Я хотел бы преобразовать их в удобочитаемые даты с помощью некоторого выражения SQL to_date() или чего-то подобного, но не может найти правильного синтаксиса, чтобы заставить его работать.Преобразование строки временной метки в дату
ответ
Здесь действительно недостаточно информации для заключения, поэтому я предлагаю эту «научную дикую задницу», чтобы решить вашу головоломку. :)
Это появляется это число 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
Конечно его можно, что это значение конверсии или по отношению к какой-либо другой значение, следовательно, запрос для второй примерной точки данных.
Ответ. Благодарю. Фактически, работая в CARTO, похоже, есть несколько вещей, которые отличаются, но ваш to_timestamp() отправил меня в правильном направлении. Мне пришлось преобразовать сначала в biginteger, а затем в метку времени, но результат является идеальным: to_timestamp (NULLIF (date_field, '') :: bigint/1000) – oddpodm
Можете ли вы предоставить второе значение с его связанной датой? – Vic
Может ли значение «1187222400000» выше соответствовать «2007-08-15 17:00:00», ? – Vic
Это возможно. У меня есть те же данные в другой базе данных, где показана только дата, но вполне возможно, что d это есть также время – oddpodm