在postgresql数组中存储日期

时间:2015-12-03 19:47:18

标签: postgresql date datetime

我有一个面向人的大型历史数据集,其中包括以YYYY,YYYY-MM或YYYY-MM-DD格式记录的出生日期。我一直在想我应该为这个字段使用date []数组,因为数据集经常列出两个或更多的出生日期。

PG docs表示支持ISO 8601日期,ISO 8601(wikipedia link)适应精度降低,但PG不允许我添加精度降低的日期(如1882- 1882年11月11日。

那么,处理需要包含多个出生日期的记录的最佳方法是什么?这些记录可能看起来像1883年,1882年或1882年至12月12日?

1 个答案:

答案 0 :(得分:0)

让我们假设你有一张表person

+----------------+---------+----------+--------------------------------+
|      person_id |  fname  |  lname   |             bdate[]            |
+----------------+---------+----------+--------------------------------+
|              1 |  'Jhon' |  'Smith' | {1883, 1882-11, or 1882-12-12} |
+----------------+---------+----------+--------------------------------+

您不希望这样,因为很难搜索一个日期或更新数组。

相反,您需要一个附加表格birthdays

+-------------+------+------------+
| birthday_id | type |   bdate    |
+-------------+------+------------+
|           1 |    1 | 1883-01-01 |
|           1 |    2 | 1882-11-01 |
|           1 |    3 | 1882-12-12 |
+-------------+------+------------+

这种方式即使保存日期1883-01-01,您也知道type = 11883