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

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

现在,假设我将所有内容存储在单个列中,那么我最终会遇到问题。 由于SQLite3具有儒略日功能,我一直在考虑将精度编码为REAL儒略日的小数部分(无论如何我都不需要小时)。 很好,但是它使SELECT的工作方式复杂化,实际上,这意味着我必须卸载到SQLite3的东西必须在应用程序代码中实现。

什么是一种合理的方法来存储不正确的日期能够快速查询它们?

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

===============>>#1 票数:1 已采纳

在查询那些日期值时,最常见的操作可能是检查某个日期是否可能与另一个日期匹配。 为此,您始终需要时间间隔的开始和结束,因此将这两个值存储在数据库中将很有意义。 (称它们为“ Start / End或“ Min / Max或“ Earliest / Latest或其他有意义的名称。)

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

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

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

... WHERE BirthDateMin < '1913-04-16'

===============>>#2 票数:0

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

===============>>#3 票数:0

使用两列。 一栏是SQLite格式的近似日期,尽可能准确。 第二列是日期的准确性(天)。 如果日期绝对正确,则第二列为零。 如果仅知道月份,则日期将是月中,第二列为15天。 可以通过与日期+/-精度列进行比较来进行日期比较。

  ask by 0xC0000022L translate from so

未解决问题?本站智能推荐: