Postgres - показать "настоящее" или "текущее" в штампе с датой?

У меня есть стол links это показывает диапазон дат, когда два человека были вместе (то есть женаты). Вот пример из 2 строк:

id  association_left  association_right  dateFrom    dateTo
1   Dad               Mom                2010-02-13  2011-01-15
2   Dad               Mom                2012-04-17  2015-11-28

Итак, здесь мы видим, что папа и мама были вместе в течение двух разных периодов времени.

Но мне интересно: есть ли способ показать, что папа и мама в настоящее время вместе? Что-то вроде:

id  association_left  association_right   dateFrom       dateTo
3   Dad               Mom                 2016-02-09     present

И если нет, то какой эффективный способ показать, если два человека в настоящее время вместе?

2 ответа

Решение

Лучше всего использовать infinity в качестве верхнего предела для диапазона времени, который распространяется в будущее.

NULL, что означает "неизвестный", не является лучшим представлением для этого, потому что таким образом вы не сможете сделать однозначный выбор между "неизвестной датой" и "данными где-то в будущем".

Более того, если вы используете infinityваши запросы станут проще и, следовательно, более эффективными. Для сравнения:

... WHERE adate >= datefrom AND (dateto IS NULL OR adate <= dateto)

а также

... WHERE adate BETWEEN datefrom AND dateto

Второе выражение может использовать индексы намного лучше.

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

оставьте столбец dateTo пустым и используйте coalesce(dateTo,current_date)

Другие вопросы по тегам