Как я должен установить нулевые даты - PullRequest
0 голосов
/ 07 июня 2018

У меня есть несколько нулевых дат в базе данных (PostgreSQL).В программе эта запись дает мне исключение нулевого указателя.

Как мне установить эти даты?Что-то вроде 01-01-1900 или как?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

NULL - это правильный способ представления неизвестного значения.Если ваш код не может справиться с этим, вы должны исправить свой код.Хранение «магических» значений в базе данных редко является хорошим решением.


Сказав, что: если вы выполняете запросы диапазона в этом столбце date (например, такие как: where the_date_column > current_date - 42 или where the_date_column between date '2018-01-01' and date '2018-04-08'), то имеете значения, отличные от NULL, для представлениядата в будущем (или в прошлом) иногда имеет смысл (потому что вы избегаете предиката or is null, который обычно запрещает использование индекса).

Если вы никогда не используете это значение для запросов диапазона (поэтому вы всегда сравниваете его с =), тогда придерживайтесь NULL и исправьте свой код.

Еслиу вас есть эти типы запросов, возможно, вы захотите взглянуть на значение infinity Postgres, которое представляет значение даты, которое больше, чем любое другое значение (и -infinity для значения, которое меньше, чем все остальные).

Таким образом, если ваше значение даты представляет, например, «действителен до» даты, а null означает «действителен бесконечно», тогда использование -infinity может иметь смысл:

insert into some_table
  (some_value, valid_from, valid_until)
values
  (42, '-infinity', 'infinity');

Следующий вопроссможет ли ваш код справиться с этим, хотя.


Если у вас регулярно есть шаблон начальной даты начала и , вы можете заменить его на одну daterange столбец.Для диапазона типа type значение NULL является эквивалентом «неограниченного».Даже если нижняя и верхняя граница диапазона равна NULL, само значение диапазона не равно нулю

0 голосов
/ 07 июня 2018
insert into some_table (some_id, some_date_column)
values
(42, NULL);
...