0

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

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

例子:

  • 10 月 1 日 10 月 1 日 5 日 31 日至 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 解决问题。我只是希望有人能帮助我理解逻辑。

非常感谢!

4

2 回答 2

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
于 2013-01-07T22:16:58.107 回答
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)。

于 2013-01-07T19:41:16.537 回答