Ошибка при использовании dateadd с миллисекундами в красном смещении - PullRequest
0 голосов
/ 02 октября 2018

Недавно появилась проблема с моей стороны.

В таблице красного смещения у меня есть 2 столбца:

Время посещения, в котором упоминается время начала сеанса и в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС;Другой столбец, который представляет собой time_spent, и обозначает миллисекунду, которую пользователь проводит на определенной странице, и в настоящее время он находится в float (8)

. Что я хочу сделать, так это добавить значение visit_time с time_spent в секунду и преобразовать егоэто в ГГГГ-ММ-ДД ЧЧ: ММ: СС, например 2018-09-20 21:00:55 + 2 = 2018-09-20 21:00:57, чтобы я мог получить значение visit_end_time.Я пытался добавить его с помощью функции добавления даты, например

Select     
dateadd(SECOND,CAST (a.timeonpage AS DECIMAL)/1000 ,a.visit_time::date) time_left,

Но он возвращает ошибку: недопустимая операция: функция pg_catalog.date_add («неизвестно», двойная точность, дата) не существует

Для этого я попытался использовать функцию dateadd следующим образом:

Select     
dateadd(SECOND,CAST (a.timeonpage AS INTEGER)/1000 ,a.visit_time::date) time_left,

Она не возвращает ошибку, но возвращает начало даты, например, 2018-09-23 00:00:00,что не то, что мне нужно.

Какую ошибку я допустил и как ее решить?Большое спасибо!

1 Ответ

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

Функция dateadd требует целое число для интервала.Проблема с вашим вторым примером заключается в том, что когда вы приводите a.visit_time к типу даты, оно усекает его до начала этого дня (удаляет компонент времени).Вместо этого приведите его к временной метке:

select dateadd(second, round(a.timeonpage/1000.0)::integer, a.visit_time::timestamp);

select dateadd(second, round(2345/1000.0)::integer, '2018-09-20 21:00:55'::timestamp);
      date_add
---------------------
 2018-09-20 21:00:57

Также, если вы сохраняете visit_time в виде строки, я бы рекомендовал сделать тип столбца временной меткой.

...