比较月与日而没有年份

  • 本文关键字:比较 logic
  • 更新时间 :
  • 英文 :


那么,我实际上有4个字段:M1 D1 M2 D2

表示第1个月第1天,第2个月第2天

例子:

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

本质上,我有一个月和一天,想知道它在哪个记录之间。我不需要任何特定的语言,但我确实有他们在一个表,并试图用SQL解决问题。我只是希望有人能帮我理清逻辑。

非常感谢!

这是我想出的每天都有效的逻辑:

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

在一个变量中有一个月和一天,想要匹配这个记录。我认为最简单的逻辑是将这些值转换为可比较的"数字"。比如:

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)。

相关内容

  • 没有找到相关文章

最新更新