如何存储(和排序)模糊的日期范围?

Tri*_*cky 12 database database-design types

我有一个数据库,需要存储年份范围(例如寿命),在某些情况下,这些数据库不是非常具体.例如,和通常的'1960'一样,我们有'c.1960年代为"1960年代左右",1960年代为1960年代,以及"nd"代表没有日期,这与迄今为止的NULL明显不同.

什么是存储这些的最佳方式?

我想可能将这一年存储为一个字符串,并附加's'几十年和'c'为大约,'nd'没有约会......但这感觉是错的.此外,按时间顺序排序时,我需要在c之前插入20世纪60年代的项目进行排序.1960年的项目,而1960年之前的项目.

我该怎么做呢?

一些示例日期范围:

1957年
c.1957年
c.1957 - 1965
c.1957 - 1960年代
c.1957年 - 现在
c.1957年 - nd

谢谢你的帮助!

Qua*_*noi 9

您可以插入该范围的最早和最晚日期.

就像,确切的日期将是

Jan 1, 1960   Jan 1, 1960
Run Code Online (Sandbox Code Playgroud)

, C.1960年将是

Jan 1, 1960   Dec 31, 1960
Run Code Online (Sandbox Code Playgroud)

,20世纪60年代将是

Jan 1, 1960   Dec 31, 1969
Run Code Online (Sandbox Code Playgroud)

等等

然后你可以在第一次约会和约会时订购:

SELECT  *
FROM    mytable
ORDER BY
        start_date, DATEDIFF(end_date, start_date) DESC
Run Code Online (Sandbox Code Playgroud)

或者,您可以存储期望值和偏差,而不是起始日期和结束日期.