【发布时间】:2012-04-26 10:08:25
【问题描述】:
我有一个要存储在数据库中的书籍列表。其中一个属性是该书首次出版的日期。在较旧的书籍(超过 100 年)中,我通常只知道十年(例如 185X),或者如果非常古老的书籍只知道世纪(例如 15XX)。
如何将这些日期保存在 datetime2 字段中? 15XX 等于 1500?例如,我希望能够查询超过一百年的书籍。所以我想以某种方式将这些值存储为有效的 datetime2 值。有什么建议吗? 15XX 作为 '1500-01-01 00:00' 对我来说似乎是合理的。这种方法有什么缺点吗?
【问题讨论】:
-
您可能需要考虑一个指示精度级别的标志列,或者至少将日期时间的时间部分设置为您的应用程序将解释为“日期不准确”的魔法值。以后应该有某种方法可以分辨出哪些日期是准确的,哪些是近似的(希望是多么近似!)
-
就我个人而言,我使用了一种类似的方法,我的未知数都是 0。否则,您可以构建一个简单的类,该类包含一个日期和一个值,该值通过岁差指示已知日期的多少(即 10、100 表示最接近的十年、世纪)。
-
另一种选择是存储 2 个代表发布日期范围的日期,当日期准确时值相同,否则它们跨越整个候选范围
-
一如既往视情况而定。灵活性越大,开销就越多;代码/维护/性能。因此,定义您需要如何使用您的数据,然后确定最适合的数据表示。 [没有最适合所有用例的通用灵丹妙药,抱歉。]