比较没有年数的月份和日期

时间:2013-01-07 19:33:54

标签: logic

所以,我基本上有4个字段:M1 D1,M2 D2

他们代表第1天第1天,第2个月第2天

示例:

  • 10月1日,5月31日,10月1日至5月31日(跨越两年)
  • 6月1日,7日,4月1日至7月4日
  • 7月5日,5日,8日,7月5日至8月1日
  • 8月2日至9月30日8日,2日,9日,30日

基本上我有一个月和一天,想要知道它们之间的哪一个记录。我不需要任何特定于语言的东西,但是我确实在表中有它们并试图用SQL解决问题。我希望有人能帮我解决这个问题。

非常感谢!

2 个答案:

答案 0 :(得分:1)

以下是我提出的每天都有效的逻辑:

WHERE (m BETWEEN m1 AND m2 AND d BETWEEN d1 AND d2)
OR (m BETWEEN m1 AND m2 AND ( (m = m1 AND d >= d1) OR (m = m2 AND d <= d2) OR (m > m1 AND m < m2) ))
OR (m1 > m2 AND ( m >= m1 OR m <= m2) AND d BETWEEN d1 AND d2)
OR (m1 > m2 AND ( m >= m1 OR m <= m2) AND ( (m = m1 AND d >= d1) OR (m = m2 AND d <= d2) OR (m > m1 OR m < m2) ))

我还更新了示例,以包含原件中未实现的情况:

  • 10,6至5,5
  • 5,6至7,4
  • 7,5至8,1
  • 8,2至10,5

答案 1 :(得分:0)

所以你在一个变量中有一个月和一天,并希望匹配记录。我认为最简单的逻辑是将这些值转换为可比的“数字”。类似的东西:

from t
where (month*100+day between m1*100+d1 and m2*100+d2 and m1*100+d1 <= m2*100+d2) or
      (month*100+day not between m2*100+d2+1 and m1*100+d1-1and m2*100+m2 < m1*100+d1)

“100”的规则只是它比那个最长的月份(31)更大,并且它为第一种情况产生看起来合理的东西(1001和531)。