我该如何设置空日期

时间:2018-06-07 06:33:24

标签: postgresql null

我在数据库中有一些空日期(PostgreSQL)。在程序中,这个记录给我空指针异常。

我该如何设置这些日期?像01-01-1900或者什么?

2 个答案:

答案 0 :(得分:1)

NULL是表示未知值的正确方法。如果您的代码无法处理,则应修复代码。在数据库中存储“神奇”值很少是一个好的决定。

话虽如此:如果您在date列上进行范围查询(例如:where the_date_column > current_date - 42where the_date_column between date '2018-01-01' and date '2018-04-08'),那么请使用NULL以外的值代表未来(或过去)的日期有时确实有意义(因为你避免使用通常阻止使用indx的or is null谓词)。

如果您从不将该值用于范围查询(因此您始终将其与=进行比较),请坚持NULL并修复您的代码。

如果您确实有这些类型的查询,您可能需要查看Postgres的infinity值,该值表示的日期值大于任何其他值(-infinity表示日期值。小于其他所有人。)

因此,如果您的日期值代表,例如“有效期至”日期,null表示“无限期有效”,然后使用-infinity可能有意义:

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

接下来的问题是你的代码是否能够处理它。

如果您经常使用开始结束日期的模式,则可能需要将其替换为单个daterange列。对于range type类型,NULL值等同于“无界”。即使范围的下限和上限为NULL,范围值本身也不为空

答案 1 :(得分:0)

insert into some_table (some_id, some_date_column)
values
(42, NULL);