在我正在开发的应用程序中,我需要存储一些元数据,其中包括可能不准确的日期。举个例子,假设我想存储产品的发布日期。我的数据集中可能出现的日期的一些示例:
我的目标是能够提供一个搜索过滤器来处理所有这些不同的和不精确的时间。对于上下文,我正在使用 C#/.NET 和 PostgreSQL 进行工作。
我正在考虑将不精确的日期存储为日期时间范围(具有“开始”和“结束”)。解析基本上意味着检测格式(可以使用一些正则表达式来完成),然后基于该格式生成范围。搜索有点挑战,我们基本上需要计算这个范围和查询范围之间的交集;我不确定是否可以用 SQL 完成,但可以完成。这种方法的一个问题是将这种结构转换回字符串;我正在考虑只存储我最初解析的原始字符串。
您认为这是一个好方法吗?你有更好的主意吗?
我建议将数据保留为
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
执行上述操作将减少数据插入/更新/删除和搜索变得更加容易。您只需要处理过滤器和渲染逻辑。