所以我有一张桌子。该表中的每个条目都有一个与之关联的日期,必须:
你会如何解决这个问题?我目前正在使用Postgres(但不依赖于它),并倾向于为每个日期属性都有一个int
列的方法,将实际的排序/比较逻辑转移到应用程序中。
有什么有趣的想法吗?
答案 0 :(得分:7)
您可以使用ISO 8601日期字符串。 ISO日期格式支持您描述的表单的部分日期(但请注意不是例如“4月23日”而没有一年)。
你的例子是:
1994-05-02T12:45:00Z
2003-04
您可以将这些作为简单字符串进行排序和比较,并获得您想要的结果。即2003-04-03
之后的词句2003-04
。
您可以从最后删除任何级别的精度,它仍然可以工作。您无法从开头或中间删除组件。
请注意,您需要将所有时区规范化为UTC才能使其正常工作,如上例所示。
如果您更喜欢在数据库中使用日期/时间戳类型,另一种方法是将日期的精度存储在辅助列中。例如。将“April 2003”存储为日期字段中的时间戳,并在辅助字段中使用标记来指示此日期以“月”精度存储,不应解释为“2003年4月1日,上午12点”。
答案 1 :(得分:1)
在PG数据库中,您可以存储日期或时间戳(大概是时区),并依赖日期算术来根据需要对它们进行排序。
在应用程序级别,您将垃圾(例如2003年4月)转换为数据库将接受存储的合理格式。如果您使用的是php,strtotime可以提供很多帮助。