sql日期时间跨度

时间:2011-08-12 09:25:31

标签: mysql date

我的表中有条目,如

uid / start / end / value

我现在想要选择特定月份的所有条目。因此,如果用户选择“六月”,我希望获得比六月份可用的所有条目。开始和结束保存为时间戳(无法更改)。我找到了类似的东西:

WHERE month(start)=5

这确实有效,但不幸的是它只给了我6月开始的条目。我当然可以在最后添加相同的内容,但如果条目从may开始并在7月结束,这仍然无济于事。我当然可以计算时间戳并直接比较,但我想选择任何一年的6月 - 而不仅仅是一个特定的。我想的是:

WHERE month(start) <= 5 && month(end) >= 5

可以正常使用时间戳,但显然这有一年的中断问题。

有没有一个很好的解决方案可以在不计算后续年份的所有时间戳并创建生病的大查询的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

好的,我想出来了:

WHERE month(start)=5
OR month(end)=5
OR ( month(start)<=5 AND month(end) >= 5)
OR ( month(start)<=5 AND year(start)<year(end))
OR ( month(end)>=5 AND year(start)<year(end))

我认为这是正确的,并且工作正常。

答案 1 :(得分:0)

它看起来应该可以工作,但它很复杂,而且我很确定使用月份功能意味着你不会遇到任何指数。

您还可以将其改写为:

where  start <= 1 Jun 2011 
and    end >= 1 Jul 2011