Logic 比较没有年份的月份和天数

Logic 比较没有年份的月份和天数,logic,Logic,所以,我基本上有4个字段:M1 D1,M2 D2 它们代表第1个月第1天,第2个月第2天 示例: 10月1日至5月31日(跨越两个不同年份) 6月1日至7月4日 7月5日至8月1日 8月2日至9月30日 基本上,我有一个月和一天的时间,我想知道这两个记录之间是哪一个。我不需要任何特定于语言的东西,但是我确实将它们放在一个表中,并试图用SQL解决这个问题。我只是想找个人帮我解释一下逻辑 非常感谢 因此,您在变量中有一个月和一天,并且希望匹配该记录。我认为最简单的逻辑是将这些值转换为可比较的“数

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

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

示例:

  • 10月1日至5月31日(跨越两个不同年份)
  • 6月1日至7月4日
  • 7月5日至8月1日
  • 8月2日至9月30日
基本上,我有一个月和一天的时间,我想知道这两个记录之间是哪一个。我不需要任何特定于语言的东西,但是我确实将它们放在一个表中,并试图用SQL解决这个问题。我只是想找个人帮我解释一下逻辑


非常感谢

因此,您在变量中有一个月和一天,并且希望匹配该记录。我认为最简单的逻辑是将这些值转换为可比较的“数字”。比如:

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)
来自t的


其中(m1*100+d1和m2*100+d2之间的月*100+天和m1*100+d1这是我提出的每天都有效的逻辑:

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) ))
式中(m在m1和m2之间,d在d1和d2之间)
或(m介于m1和m2之间,且((m=m1和d>=d1)或(m=m2和d m1和mm2和(m>=m1或m2和(m>=m1或m=d1)或(m=m2和dm1或m
我还更新了示例,以包括原始示例中未实现的情况:

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

如果我理解正确,例如,您将有一个像{mnth,dy}这样的值,您想看看该值(对)是否在区间[{7,5},{8,1}]之间,例如?@MichaelM。这是正确的!12/30应该适合第一个示例,但是1230不在(1001和531)之间@JamesKleeh…你是对的。第二个子句应该是
而不是介于
之间。这可能会引入一个off-by-1错误…这取决于10/01和5/31是否满足条件。如前所述,它们不满足条件。明智地使用“+1”和“-1”我在一年中每天都运行这个程序,但只有10/1和5/31天它不起作用