Как получить EPOCH каскадной метки времени в PostgreSQL - PullRequest
0 голосов
/ 17 октября 2018

В PostgreSQL, как получить эпоху (время UTC) поля даты таблицы, чей часовой пояс считается GMT, а значение часов, мин, секунд предполагается равным '00: 00: 00 '?

например, mytable.DT_GMT имеет значения типа '2018-10-16'.

Вот что я пробовал до сих пор.Вместо DT_GMT я просто использовал «2018-10-16».Я заменю его полем таблицы, как только у меня будет что-то, что работает.

postgres=> select extract(epoch from TIMESTAMP WITH TIME ZONE concat('2018-10-16',' 00:00:00.00-00') );
ERROR:  syntax error at or near "concat"
LINE 1: ...elect extract(epoch from TIMESTAMP WITH TIME ZONE concat('20...

Попытка что-то связать:

postgres=> SELECT TIMESTAMP ('2018-10-16' || ' 00:00:00.00') AT TIME ZONE 'GMT';
ERROR:  syntax error at or near "'2018-10-16'"
LINE 1: SELECT TIMESTAMP ('2018-10-16' || ' 20:38:40') AT TIME ZONE ...

Обратите внимание, что часы ... сек необходимы, потому чтобез этого эти значения не то, что требуется.

postgres=> SELECT TIMESTAMP '2018-10-16' AT TIME ZONE 'GMT';
        timezone
------------------------
 2018-10-15 17:00:00-07
(1 row)

1 Ответ

0 голосов
/ 17 октября 2018

Вместо объединения строк, вы добавляете их как date и time with time zone.

test=> select extract(epoch from date '2018-10-16' + time with time zone '00:00:00.00-00');
 date_part  
------------
 1539648000
(1 row)

Если вы добавляете только '00: 00: 00 'кзаставить работать часовые пояса, вам не нужно это с date.

test=> select date_part('epoch', date '2018-10-16');
 date_part  
------------
 1539648000

$ date --date '@1539648000' --utc
Tue Oct 16 00:00:00 UTC 2018

Это хорошая причина для сохранения даты и времени в качестве их правильного типа, особенно в Postgres, который очень заботится отипы, а не как text.

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