PostgreSQL提供date
格式数据类型来存储日期。然而,这些日期的问题是 - 据我所知 - 他们不能解释不确定性。
有时人们不知道某事的完整日期,但知道它发生在1995年1月或“1999或2000”(date2
)。可能有几个原因:
我想知道是否有一种数据类型来存储这样的“日期”以及它们是如何传递的。对于某些操作,它会导致 thee-valued logic ,例如date2 < 20001/01/01
应为true
,date2 < 2000/01/01
为possible
和{{1}应该是date2 < 1998/01/01
。
如果没有这样的数据类型,在自己构建这样的“表”有什么好的做法?
答案 0 :(得分:6)
有几种不同的方法来处理模糊日期。在PostgreSQL中,您可以使用
范围数据类型是PostgreSQL的最新版本所特有的。您可以在任何SQL dbms中使用其他SQL。
您需要的那种模糊性取决于应用程序。查询模糊日期的方式取决于您选择的数据类型或结构。您需要牢牢掌握需要存储的模糊性以及用户需要回答的问题类型。您需要进行测试以确保您的数据库能够回答他们的问题。
例如,在法律制度中,日期可能会被记住不当或污损。有人可能会说&#34;这是2014年1月的某个星期四。我知道这是星期四,因为它是垃圾收集日&#34;或者#34;这是第一次去年6月或7月的一周#34;要记录那种模糊性,你需要另一张桌子。
或邮戳可能会受到损坏,因此您只能阅读&#34; 2014年,2014年和#34;。你知道它在14号邮戳,但你不知道哪个月。同样,你需要另一张桌子。
除非你跳过一些箍,否则有些(全部?)这些都不会给你三值逻辑。 (&#34;可能&#34;不是有效的布尔值。)
答案 1 :(得分:2)
要添加Mike发布的内容,我会使用日期评论,例如:
date Comment
-------------------------------------------------------------------
1/1/2010 Sometime in 2010
7/8/2014 Customer says they will pay the second week in July
1/1/2015 Package will arrive sometime next year in January
此外,您还可以使用日期部分。为Year,Month和Day创建单独的列。什么是未知的事情让它一片空白。