I have a database which needs to store year ranges (such as lifespan) which in some instances aren’t very specific. For example, as well as the usual ‘1960’, we have ‘c. 1960’ for “around 1960”, and 1960s for in the decade 1960, as well as ‘nd’ for no date which is distinctly different from NULL which would be until present.
What would be the best way to store these?
I was thinking of possibly storing the year as a string and appending ‘s’ for decades and ‘c’ for circa, with ‘nd’ for no date… but this feels just wrong. Also, when sorting chronologically I need to sort by inserting 1960s items before c. 1960 items, which in turn are before 1960 items.
How do I do this properly?
Some example date ranges:
1957
c. 1957
c. 1957 – 1965
c. 1957 – 1960s
c. 1957 – present
c. 1957 – nd
Thanks for your help!
You can insert the earliest and the latest date possible for the range.
Like, exact date will be
, c. 1960 will be
, 1960s will be
etc.
Then you can order by the first date and the datediff:
Alternatively, you can store the expected value and the deviation instead of the start and end dates.