代码之家  ›  专栏  ›  技术社区  ›  Tricky

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

  •  12
  • Tricky  · 技术社区  · 14 年前

    储存这些东西最好的方法是什么?

    我该怎么做?

    1957
    C1957
    C1957 - 1965
    C1957-1960年代
    C1957年至今
    C1957年-第

    谢谢你的帮助!

    5 回复  |  直到 14 年前
        1
  •  9
  •   Quassnoi    14 年前

    您可以为范围插入最早和最晚的日期。

    确切的日期是

    Jan 1, 1960   Jan 1, 1960
    

    Jan 1, 1960   Dec 31, 1960
    

    ,60年代将是

    Jan 1, 1960   Dec 31, 1969
    

    然后您可以按第一个日期和日期差异订购:

    SELECT  *
    FROM    mytable
    ORDER BY
            start_date, DATEDIFF(end_date, start_date) DESC
    

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

        2
  •  1
  •   Max    14 年前

    这听起来像是一个“模糊逻辑”类型的问题。我将通过使用多个列来解决这个问题:

    • 最早日期
    • 最早确定日期
    • 最晚可能日期

    你的例子可以表示为

    • 1957,1957,1957,1957
    • 1955,1959,1965,1965
    • 19551959,空,空
    • 1955,1959,9999,9999

    我假设'c'表示+/-2年,从'0到'9的十年,9999是'nd'的标志值

    有什么用吗?

        3
  •  0
  •   Mr Shoubs    14 年前

    我认为我的回答很好,你也可以 generate a time dimension 然后以同样的方式引用它(尽管您的维度可能不需要那么多行)?

        4
  •  0
  •   Mark Schultheiss    14 年前

    关于这一性质的事情,还有一个值得注意的事项——什么历法规定了一天的实际日期,比如10月4日(儒略)之后是10月15日(公历),这是1582年的一个变化,1751年的类似变化,将不列颠及其当时的殖民地改为公历。因此,您需要确定正在使用的日历,可以将其转换为当前日历。

    有趣的是,把凯撒和日历(三月一日)和他对闰年/闰日的改革,其中2月24日是闰年的第二个第六天,因此闰年有两个2月24日(两个第六天)。

    我指出这一点是因为闰年的天数在某些情况下可能会改变你的周期。

    所以,我建议使用Max和/或Quassnoi这样的结构,但可能会更多地用于deliniation。

    日历和理解引文: What is a calendar

        5
  •  0
  •   Erwin Smout    14 年前

    (B) 让我们以高于平均水平的仔细程度来分析一下,这可能意味着一个“模糊”的日期范围。对我来说,这似乎是某种日期范围,其中要么是开始日期,要么是结束日期,或者两者都不知道,但其中一个(或两者)是已知的 他们自己 一个靶场。

    (C) 众所周知,通常的数学概念“顺序”(又名“总顺序”)并不适用于“范围”的概念(您如何确定1-3大于或小于0-6?)。它 理论上可能 定义

    (D) 如果一个范围的“开始日期”和/或“结束日期”本身是“模糊的”(也就是说,这些组成部分本身就是范围),那么很明显,为什么尝试和有意义地排列这样的范围是疯狂的。

    所以“(and sort)”部分的答案是:“你没有,因为你不能(以一种有意义的方式)”。