存储不精确/不精确日期的好方法是什么?

问题描述 投票:0回答:1

在我正在开发的应用程序中,我需要存储一些元数据,其中包括可能不准确的日期。举个例子,假设我想存储产品的发布日期。我的数据集中可能出现的日期的一些示例:

  • 2023-01-10 12:00:00 - 我们确切地知道它的发布时间(包括时间),例如他们此时有一个发布活动
  • 2010-01-10 - 不知道时间,但那是确切的日期
  • 2000-01 - 没有确切的日期,但我们知道那是在一月份
  • 2000 年第一季度 - 没有确切日期,但我们知道是在第一季度
  • 1995 - 没有确切的日期,我们只知道年份
  • 1990 年代 - 我们甚至不知道是哪一年,只是知道那是 90 年代的某个时间

我的目标是能够提供一个搜索过滤器来处理所有这些不同的和不精确的时间。对于上下文,我正在使用 C#/.NET 和 PostgreSQL 进行工作。

我正在考虑将不精确的日期存储为日期时间范围(具有“开始”和“结束”)。解析基本上意味着检测格式(可以使用一些正则表达式来完成),然后基于该格式生成范围。搜索有点挑战,我们基本上需要计算这个范围和查询范围之间的交集;我不确定是否可以用 SQL 完成,但可以完成。这种方法的一个问题是将这种结构转换回字符串;我正在考虑只存储我最初解析的原始字符串。

您认为这是一个好方法吗?你有更好的主意吗?

c# sql date datetime database-design
1个回答
0
投票

我建议将数据保留为

DateTime
,然后在另一列中存储该日期类型。例如,如果您存储
2023-01-01 12:00:00
可能没有确切的日期,但我们知道那是在一月份,或者您确切地知道日期和时间。

显示时使用第二列格式化日期时间。例如

DateTime              | DateType
2023-01-01 12:00:00     DateOnly -> Ignore the time part
2023-01-01 12:00:00     DateTime -> You exactly know the Date and the Time
2023-03-30 11:59:59     Q1 -> Ignore the time part
2023-03-30 11:59:59     Q1 -> You exactly know the Date and the Time

执行上述操作将减少数据插入/更新/删除和搜索变得更加容易。您只需要处理过滤器和渲染逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.