2

我正在研究以 SQLite3 格式存储其数据的系谱软件。一切正常,除了一个小细节。并非在所有情况下,出生日期或死亡日期(等)的准确性都可用于确切的日期。所以我有以下准确性:

  • 准确 (YYYY-MM-DD)
  • 月 (YYYY-MM)
  • 年份 (YYYY)
  • 年 (YYYY+/-5)
  • 年 (YYYY+/-10)
  • 年 (YYYY+/-50)
  • 十年
  • 世纪

现在,假设我将所有内容存储在一个列中,我最终会遇到问题。由于 SQLite3 具有Julian Day 函数,我想在REALJulian Day 的小数部分编码准确性(无论如何我不需要小时数)。这很好,但它使SELECT工作方式复杂化,实际上这意味着我可以卸载到 SQLite3 的东西必须在应用程序代码中实现。

存储不准确日期并能够快速查询它们的合理方法是什么?

注意:如果对任何回答的人都很重要,那么使用的语言是 Python,但我一般都在问。

4

3 回答 3

1

在对这些日期值进行查询时,最常见的操作可能是检查一个日期是否可能与另一个日期匹配。为此,您始终需要间隔的开始和结束,因此将这两个值存储在数据库中是有意义的。(打电话给他们Start/EndMin/MaxEarliest/Latest或任何有意义的东西。)

例如,要查找可能出生于一个世纪前的人:

... WHERE '1913-04-16' BETWEEN BirthDateMin AND BirthDateMax

可以使用区间边界之一进行不等式比较。例如,要查找可能出生于一个多世纪前的人:

... WHERE BirthDateMin < '1913-04-16'
于 2013-04-16T07:35:29.190 回答
0

仅仅因为您正在存储日期信息,并不意味着内置日期类型适合您。您的数据要求(日期不准确)意味着执行一些自定义日期处理工作并避免使用内置日期数据类型可能更准确、更长期。

于 2013-04-15T23:56:28.720 回答
0

使用两列。一列是大致日期,尽可能准确,采用 SQLite 格式。第二列是以天为单位的日期的准确性。如果日期绝对准确,则第二列为零。如果只知道月份,则日期为月中,第二列为 15 天。等等。可以通过与日期 +/- 精度列进行比较来进行日期比较。

于 2013-04-16T03:00:24.973 回答