PostgreSQL и ЦТЗРАНЖ - PullRequest
       4

PostgreSQL и ЦТЗРАНЖ

0 голосов
/ 19 апреля 2020

Я очень новичок в использовании диапазонов даты и времени, и после просмотра документации я не понимаю, почему следующий простой запрос не работает так, как я ожидал:

продолжительности жизни = DateTimeRangeField

select id, lifespan 
from companyfeatures
where lifespan && TSTZRANGE('1 Mar 2020', '1 May 2020')

Я ожидал, что результатом будут только те записи, срок жизни которых находится в промежутке между «1 марта 2020 года» и «1 мая 2020 года» - однако результаты включают записи с продолжительностью жизни NULL.

Может помогите или объясните, где я ошибаюсь?

Редактировать: Спасибо @a_horse_with_no_name - После еще нескольких копий выясняется, что поле продолжительности жизни ранее было заполнено пустыми или диапазонами по умолчанию ie DateTimeTZRange (Нет, Нет, '()') - поэтому они не равны нулю. Очень грязно, и я не могу изменить это (на данном этапе). Таким образом, я ищу способ найти совпадение (иметь общие точки) с моими указанными c диапазонными датами и игнорировать «пустые» даты? Вы можете помочь?

dbfiddle

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете отфильтровать их в предложении WHERE

select id, lifespan 
from companyfeatures
where upper(lifespan) IS NOT NULL 
  and lower(lifespan) IS NOT NULL
  and lifespan && TSTZRANGE('2020-03-01', '2020-05-01')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...