当前位置: 首页 > 面试题库 >

如何在PostgreSQL中表示不确定的日期

东门晟
2023-03-14
问题内容

PostgreSQL提供了date格式数据类型来存储日期。这些日期的问题是,据我所知,它们无法解释不确定性。

有时人们不知道某事的完整日期,但知道它发生在1995年1月或“ 1999或2000”中(date2)。可能有以下几个原因:

  • 人们不记得确切的日期;
  • 确切的日期从根本上是未知的:例如,某人在某天最后一次被人看到,几天后被发现死亡。或者
  • 我们处理未来的事件,因此仍然有可能出现问题。

我想知道是否存在一种数据类型来存储此类“日期”以及如何处理它们。这将导致某些操作(例如,应该是,应该和应该)的具有 e值的逻辑date2 < 20001/01/01``true``date2 < 2000/01/01``possible``date2 < 1998/01/01``false

如果没有这样的数据类型,那么自行构造“表”的良好实践是什么?


问题答案:

有几种不同的方法来处理模糊日期。在PostgreSQL中,您可以使用

  • 一对日期列(earlyest_possible_date,latest_possible_date),
  • 日期列和精度列(“ 2012-01-01”,“年”),或
  • 一个范围内的数据类型(日期范围),或
  • varchar(‘2013-01-2?’,‘2013-??-05’),或
  • 具有任何这些数据类型的另一个表。

rangehtml" target="_blank">数据类型是PostgreSQL的最新版本所特有的。您可以在任何SQL dbms中使用其他数据库。

您需要的模糊性取决于应用程序。如何查询模糊日期取决于您选择的数据类型或结构。您需要牢牢掌握需要存储哪种类型的模糊性以及用户需要回答的哪种类型的问题。并且您需要进行测试以确保您的数据库可以回答他们的问题。

例如,在法律体系中,日期可能记不清或污损了。有人可能会说:“是2014年1月的某个星期四。我 知道
是星期四,因为这是垃圾收集日”,或者是“这是去年6月或7月的第一周”。要记录这种模糊性,您需要另一个表。

否则可能会破坏邮戳,以便您只能阅读“ 14,2014”。您知道它是在14日邮戳的,但您不知道是哪个月。同样,您需要另一个表。

其中有些(全部?)不会给您提供三值逻辑,除非您跳了几圈。(“可能”不是有效的布尔值。)



 类似资料:
  • 问题内容: 我假设Java有一些内置的方法可以做到这一点。 给定日期,我如何确定该日期之前一天? 例如,假设给我3/1/2009。上一个日期是2009年2月28日。如果给我3/1/2008,那么以前的日期应该是2/29/2008。 问题答案: 使用日历界面。 以这种方式进行“加法”可确保您获得有效的日期。该日期也于一年的1月1日有效,例如2012年1月1日为2011年12月31日。

  • 我想在一个android应用程序中制作一个Person类。在那个类中,我想存储这个人的生日,然后用这个日期计算(例如他多大了,或者离他下一个生日还有几天)。我不知道如何做到这一点,尽管我尝试了几个类,比如Date(不建议使用)和GregorianCalendar,它在API级别28以下是不可用的(我使用API级别21)。

  • 问题内容: 在所有三个日期都由的实例表示的情况下,如何检查某个日期是否在其他两个日期之间? 问题答案: 这可能更具可读性:

  • 问题内容: 例如,以YYYYMMDD作为格式的日期并同时考虑the年 20160201是一年中的32天 20160226是一年中的第57天 20161231是每年的366天 问题答案: 使用功能,为您提供一年中的某天:

  • 问题内容: 我想生成一个日期列表,希望能与另一个表连接,但是我不知道要使用什么语法,类似于以下内容: 我想要日期,因此不必在客户端进一步处理数据。我正在使用它来显示类似于此的表: 问题答案: 日期清单 使用generate_series函数获取可以添加到日期的数字列表,以获取日期列表: 结果: 旋转 问题的后半部分涉及透视结果集- 将行数据转换为列数据。PIVOT和UNPIVOT是ANSI,但我目