我正在寻找一个简单的查询,将一个月包含在2个月内。我解释一下:
我有一张
的桌子id | month1 | month2
表示从第1个月到第2个月的ID是正常的(字段是月份数)。例如:
145 | 8 | 2
意思是:从8月到2月,id 2是可以的
现在,当我选择一个月时,我正在寻找一个简单的查询来选择id。例如:
对于3月份(所以数字3),我们关注哪个?
我用很多AND和OR进行了很长时间的查询,但它非常复杂,我确信有一种简单的方法可以实现它。难点是十二月之后X和一个月之间的ID ......
像
这样的查询SELECT * FROM `table` WHERE 2 between month(month1) and month(month2)
请问好吗? 感谢
答案 0 :(得分:1)
您想要返回给定月份内有效的所有记录:
SELECT *
FROM `table`
WHERE CASE WHEN month1 < month2
THEN (month1 <= 3 AND month2 >= 3)
ELSE (month1 <= 3)
OR
(month1 > 3 AND month2 >= 3)
END CASE
虽然上面的查询尚未经过测试,但我会尝试这些方法。 (我似乎无法继续使用sqlfiddle ......)
CASE
测试第一个月是否小于第二个月,在这种情况下很容易:您只需测试给定的数字在month1
和month2
之间。如果不是,您应该提供两个选项:要么您的选择大于month1
,所以它应该总是返回true;或者它小于month1
,但在这种情况下它应该大于或等于month2
。
答案 1 :(得分:0)
以下查询将输出两个月内的所有行。
SELECT *,COUNT(1)AS amountOfMonths FROM table GROUP BY month HAVING amountOfMonths = 2