Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 datetime + interval  [new]
HobbytF
Member

Откуда:
Сообщений: 41
Доброго дня!

Задача тривиальная, но никак не получается ее решить.
В таблице 2 поля:
saletime timestamp (без timezone)
timezone int8

Структура таблицы стороннего разработчика, поэтому я не знаю, почему сразу не учли TZ.

Необходимо получить saletime с учетом TZ.
Видимо необходимо использовать interval.
Запрос работает правильно:
select saletime + interval '2 hours' from table;

А как привести к работающему виду запрос?
select saletime + interval timezone || ' hours' from table;

Может есть какое-то простое стандартное решение?
27 сен 19, 11:31    [21980671]     Ответить | Цитировать Сообщить модератору
 Re: datetime + interval  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 913
HobbytF,

saletime + timezone * interval '1 hour'
27 сен 19, 11:43    [21980693]     Ответить | Цитировать Сообщить модератору
 Re: datetime + interval  [new]
HobbytF
Member

Откуда:
Сообщений: 41
Melkij,

Большое спасибо.
Однако, сформулировав подзадачу, я надеялся решить всю задачу, но опять же не выходит.

В результате этого
saletime + timezone * interval '1 hour'

получаем TIMESTAMP.
TSRANGE вроде тоже использует TIMESTAMP'ы. Но такое условие не работает:

where saletime <@ tsrange (TIMESTAMP '2019-09-27 10:00:00' + timezone*interval '1 hours', TIMESTAMP '2019-09-27 10:10:00' + timezone*interval '1 hours', '[)')

Хотя если убрать timezone *, то работает.
27 сен 19, 13:04    [21980802]     Ответить | Цитировать Сообщить модератору
 Re: datetime + interval  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 913
HobbytF,

а зачем вам tsrange здесь? Сделайте просто between.

Ну и с timestamp у меня работает тоже. С timestamptz - нет, жалуется на отсутствие оператора timestamp with time zone <@ tsrange
27 сен 19, 13:17    [21980821]     Ответить | Цитировать Сообщить модератору
 Re: datetime + interval  [new]
HobbytF
Member

Откуда:
Сообщений: 41
Melkij,

Что-то я совсем запутался.
C BETWEEN ситуация аналогичная

Такая штука работает, но без учета TZ
where (saletime between '2019-09-27 10:00:00'::TIMESTAMP + interval '1 hours' and '2019-09-27 10:10:00'::TIMESTAMP + interval '1 hours' )


А такая штука не работает:
where (saletime between '2019-09-27 10:00:00'::TIMESTAMP + timezone * interval '1 hours' and '2019-09-27 10:10:00'::TIMESTAMP + timezone * interval '1 hours' )

Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить явные приведения типов.

Если не сложно, напишите, напишите правильный синтаксис.
27 сен 19, 13:46    [21980865]     Ответить | Цитировать Сообщить модератору
 Re: datetime + interval  [new]
HobbytF
Member

Откуда:
Сообщений: 41
Melkij,

Я нашел проблему. timezone был varchar.
Большое спасибо за помощь.
27 сен 19, 13:53    [21980876]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить