Как получить дату и время из интервала в vertica

Я новичок в Вертике.

Я пытаюсь получить дату и время предоставленных секунд.

У меня есть значение секунд с 1980-01-01.

когда я пытаюсь так:

\set interval '''1199283171.887953002212558175021 SECOND'''
SELECT DATE('1980-01-01') + INTERVAL :interval 

Я получаю свой вывод:

2018-01-01 14:12:51.887953

(Одно из значений секунд установлено в переменный интервал. Попытка в замазке Linux)

Но я хочу иметь его для своих 100 записей в таблице. Это только для одного входа. Я пытался, но не понял.

Как я могу сделать это для всех значений?


person Jay    schedule 01.06.2018    source источник
comment
Используйте to_char()   -  person a_horse_with_no_name    schedule 05.06.2018


Ответы (1)


Если я вас правильно понял, у вас есть стократное значение с плавающей запятой с секундами, что означает количество секунд, прошедших с «1980-01-01 00:00:00», вероятно, UTC.

Я нашел три способа сделать это — как вы можете видеть здесь, с таблицей из 10 строк.

Я просто поленился и добавил ‹‹ n >> раз 3600 секунд к вашему начальному значению секунд. Делает его читаемым, так как в результирующей метке времени изменяется только час. Как видите, все выражения возвращают одно и то же.

Это поможет?

WITH input(secs) AS (
          SELECT 1199283171.887953002212558175021 + 0 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 1 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 2 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 3 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 4 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 5 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 6 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 7 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 8 * 3600
UNION ALL SELECT 1199283171.887953002212558175021 + 9 * 3600
)   
SELECT
  secs
, '1980-01-01'::TIMESTAMP + (secs::VARCHAR(32)||' SECOND')::INTERVAL     AS add_interval
, '1980-01-01'::TIMESTAMP + (secs/86400)                                 AS add_day_fraction
, TIMESTAMPADD(MICROSECOND,(1000000*secs)::INT, '1980-01-01'::TIMESTAMP) AS using_function
FROM input;
               secs               |        add_interval        |      add_day_fraction      |       using_function       
----------------------------------+----------------------------+----------------------------+----------------------------
 1199283171.887953002212558175021 | 2018-01-01 14:12:51.887953 | 2018-01-01 14:12:51.887953 | 2018-01-01 14:12:51.887953
 1199286771.887953002212558175021 | 2018-01-01 15:12:51.887953 | 2018-01-01 15:12:51.887953 | 2018-01-01 15:12:51.887953
 1199290371.887953002212558175021 | 2018-01-01 16:12:51.887953 | 2018-01-01 16:12:51.887953 | 2018-01-01 16:12:51.887953
 1199293971.887953002212558175021 | 2018-01-01 17:12:51.887953 | 2018-01-01 17:12:51.887953 | 2018-01-01 17:12:51.887953
 1199297571.887953002212558175021 | 2018-01-01 18:12:51.887953 | 2018-01-01 18:12:51.887953 | 2018-01-01 18:12:51.887953
 1199301171.887953002212558175021 | 2018-01-01 19:12:51.887953 | 2018-01-01 19:12:51.887953 | 2018-01-01 19:12:51.887953
 1199304771.887953002212558175021 | 2018-01-01 20:12:51.887953 | 2018-01-01 20:12:51.887953 | 2018-01-01 20:12:51.887953
 1199308371.887953002212558175021 | 2018-01-01 21:12:51.887953 | 2018-01-01 21:12:51.887953 | 2018-01-01 21:12:51.887953
 1199311971.887953002212558175021 | 2018-01-01 22:12:51.887953 | 2018-01-01 22:12:51.887953 | 2018-01-01 22:12:51.887953
 1199315571.887953002212558175021 | 2018-01-01 23:12:51.887953 | 2018-01-01 23:12:51.887953 | 2018-01-01 23:12:51.887953
person marcothesane    schedule 14.06.2018
comment
Я изменил его с помощью своих табличных входов, и это сработало. Большое спасибо ...!! - person Jay; 15.06.2018