Как использовать функцию NOW () в качестве верхней границы диапазона? - PullRequest
1 голос
/ 20 июня 2019

У меня есть таблица со столбцом типа tstzrange в базе данных Postgres 10.6.Мне нужно вставить / обновить строки с определенной нижней границей, но значением текущего времени для верхней границы диапазона, поэтому NOW() в качестве верхнего значения.

Пробовали такие вещи, как:

UPDATE table_name
SET date_range = ['2018-03-23 00:00:00-05', now())
WHERE id = 3;

Можно ли использовать встроенную функцию или подзапрос?

1 Ответ

2 голосов
/ 20 июня 2019

Используйте конструктор диапазона . Руководство:

Каждый тип диапазона имеет функцию конструктора с тем же именем, что и Тип диапазона. Использование функции конструктора часто более удобнее, чем написание константы литерала диапазона, так как это позволяет избежать необходимость дополнительного цитирования связанных значений. Функция конструктора принимает два или три аргумента. Форма с двумя аргументами создает диапазон в стандартной форме (нижняя граница включительно, верхняя граница исключая), в то время как форма с тремя аргументами создает диапазон с границами Форма указана третьим аргументом. Третий аргумент должен быть один из строк «()», «(]», «[)» или «[]».

Итак:

UPDATE table_name
SET    date_range = tstzrange('2018-03-23 00:00:00-05', now())
WHERE  id = 3;

Полагаю, вы знаете, что now() разрешает время начала транзакции.

...