MySQL WEEK() - 我还需要比较YEAR吗?

时间:2013-01-08 10:17:39

标签: mysql

这是我的查询的一部分:

WHERE WEEK( data.time ) = ( WEEK( CURRENT_DATE + INTERVAL -3 WEEK ) )

我可以从三周前选择数据,即2012年12月。 现在问题是 - 我获得了所有年份的那一周的数据。不仅仅是三周前的那个。

添加

YEAR( data.time ) = YEAR( CURRENT_DATE + INTERVAL -3 WEEK ) 

解决了这个问题,但是我想知道是否有必要比较这些年份,或者我是否只能参加周比较 - 如果我以某种方式调整第一行。

我在这里找到了类似的查询 MySQL week numbers and New Year 但他们多年没有提到这样的问题,即使没有年份比较,它似乎也适用于他们。

2 个答案:

答案 0 :(得分:2)

通过与所需周的开始和结束进行比较,您将获得更好的服务。类似的东西:

WHERE SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 21) <= data.time 
    AND data.time < SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 14);

会在一年的第一周和最后一周产生影响。例如,2012-12-31是2013-W01的一部分( 2013 的第一周)。因此WEEK会说1YEAR会说2012。鉴于2013-01-13,2013-W01的一部分WEEK1YEAR2013。如此天真地使用WEEKYEAR会给你错误的结果。

答案 1 :(得分:0)

我会说是的,如果您的表中存在多年的数据,那么您应该始终包含Year()比较。

除非您告诉它您只想要2012年,否则您的数据库不知道。

因此,当您编写查询时,您将包括:

select *
from yourtable 
where week(yourdate) = week(CURRENT_DATE + INTERVAL -3 WEEK)
  and year(yourdate) = year(CURRENT_DATE + INTERVAL -3 WEEK) 

如果您要比较几个月,那就相同:

select *
from yourtable 
where month(yourdate) = month(CURRENT_DATE + INTERVAL -3 WEEK)
  and year(yourdate) = year(CURRENT_DATE + INTERVAL -3 WEEK) 

这样做可确保您返回的数据与周,年,月,年相匹配。