Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / datetime + interval / 6 сообщений из 6, страница 1 из 1
27.09.2019, 11:31
    #39867752
HobbytF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datetime + interval
Доброго дня!

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

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

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


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


Может есть какое-то простое стандартное решение?
...
Рейтинг: 0 / 0
27.09.2019, 11:43
    #39867761
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datetime + interval
HobbytF,

Код: sql
1.
saletime + timezone * interval '1 hour'
...
Рейтинг: 0 / 0
27.09.2019, 13:04
    #39867822
HobbytF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datetime + interval
Melkij,

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

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


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

Код: sql
1.
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 * , то работает.
...
Рейтинг: 0 / 0
27.09.2019, 13:17
    #39867833
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datetime + interval
HobbytF,

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

Ну и с timestamp у меня работает тоже. С timestamptz - нет, жалуется на отсутствие оператора timestamp with time zone <@ tsrange
...
Рейтинг: 0 / 0
27.09.2019, 13:46
    #39867856
HobbytF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datetime + interval
Melkij,

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

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



А такая штука не работает:
Код: sql
1.
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' )


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

Если не сложно, напишите, напишите правильный синтаксис.
...
Рейтинг: 0 / 0
27.09.2019, 13:53
    #39867861
HobbytF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datetime + interval
Melkij,

Я нашел проблему. timezone был varchar.
Большое спасибо за помощь.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / datetime + interval / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]