我正在研究以SQLite3格式存储数据的系谱软件。一切都很好,除了一个小细节。并非在所有情况下都是确切日可用的出生日期(等)的准确性。所以我有以下准确性:
现在,假设我将所有内容存储在一个列中,我最终遇到了问题。由于SQLite3有Julian Day function,我想在REAL
朱利安日的小数部分编码精确度(我不需要时间)。这很好,但它使SELECT
的工作方式变得复杂,事实上它意味着我可以以其他方式卸载到SQLite3的东西必须在应用程序代码中实现。
存储不准确日期和能够快速查询的合理方法是什么?
注意:如果对任何回答都很重要,那么使用的语言是Python,但我一般都会问。
答案 0 :(得分:1)
对这些日期值进行查询时,最常见的操作可能是检查日期是否与另一个日期匹配。
为此,您始终需要间隔的开始和结束,因此将这两个值存储在DB中是有意义的。
(称他们为Start
/ End
或Min
/ Max
或Earliest
/ Latest
或任何有意义的。)
例如,找一个可能在一个世纪前出生的人:
... WHERE '1913-04-16' BETWEEN BirthDateMin AND BirthDateMax
可以使用其中一个区间边界进行不等式比较。 例如,要找到可能在一个多世纪前出生的人:
... WHERE BirthDateMin < '1913-04-16'
答案 1 :(得分:0)
仅仅因为您存储日期信息,并不意味着内置日期类型适合您。您的数据要求(日期不准确)意味着进行一些自定义日期处理工作可能更准确,更长远,并避免使用内置日期数据类型。
答案 2 :(得分:0)
使用两列。一列是SQLite格式的尽可能准确的近似日期。第二列是以天为单位的日期的准确性。如果日期绝对准确,则第二列为零。如果仅知道月份,则日期为月中,第二列为15天。等等。日期比较可以通过与日期+/-准确度列进行比较来完成。