Как получить временную метку от postgres? - PullRequest
4 голосов
/ 03 августа 2010

Я хочу получить данные от Postgres.Существует столбец типа timestamp без часового пояса.Простой SELECT возвращает мне отформатированную дату, но я просто хочу метку времени в миллисекундах.Как я могу сделать это в SQL?

1 Ответ

6 голосов
/ 03 августа 2010
select extract(epoch from my_timestamp)

Возвращает время в секундах. Тем не менее, это десятичное число с долями секунды после десятичной точки. Подробнее о точности читайте ниже.

Для миллис, используйте:

select extract(epoch from my_timestamp)*1000

Тест:

select my_date, 
extract(epoch from my_date)*interval'1s'+'epoch'::timestamp at time zone 'GMT'

Примечание по точности

extract возвращает число «двойной точности», которое соответствует 15 цифрам в Postgres. Это означает, что около 2016 года (как я это пишу) фактическая точность составляет 10 микросекунд. Обратите внимание, как округляется последняя цифра:

select extract('epoch' from '2016-09-20T11:22:33.456789Z'::timestamp);
    date_part     
------------------
 1474370553.45679
(1 row)

Для таких дат, как 270 лет в будущем, этот тип данных сможет представлять точность только в 100 микросекунд. Это выглядит как приличная точность с точки зрения 2016 года, и я думаю, что все может немного измениться, прежде чем мы достигнем этого года.

select extract('epoch' from '2290-09-20T11:22:33.456789Z'::timestamp);
    date_part     
------------------
 10120936953.4568
(1 row)

В любом случае, он будет продолжать нормально работать с точностью миллисекунда .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...