我在数据库中有一些空日期(PostgreSQL)。在程序中,这个记录给我空指针异常。
我该如何设置这些日期?像01-01-1900或者什么?
答案 0 :(得分:1)
NULL
是表示未知值的正确方法。如果您的代码无法处理,则应修复代码。在数据库中存储“神奇”值很少是一个好的决定。
话虽如此:如果您在date
列上进行范围查询(例如:where the_date_column > current_date - 42
或where 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);