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)