我沒有測試過這一點,但你可以做類似如下:
SELECT
# check if the year is a leap year:
IF((YEAR(mydate) % 4 = 0 AND YEAR(mydate) % 100 != 0) OR YEAR(mydate) % 400 = 0,
# if so, check if the date is before or after february 29th. if that is the case, we subtract one from the value
IF(DAYOFYEAR(mydate) > DAYOFYEAR("2008-02-28"), DAYOFYEAR(mydate) - 1, DAYOFYEAR(mydate)),
# if the year isn't a leap year, just return the regular dayofyear() value
DAYOFYEAR(mydate))
FROM mytbl
這將合併爲28日和29日爲閏年的數據,但在閏年和非閏年的所有日子裏給了天一樣的偏移。更理想的行爲可能是簡單地忽略2月29日的數據,這可以使用附加條件來完成。你也可以爲它分配一個特殊的索引,比如400,這不會抵消其他所有的日子。
一個更好的辦法可能是由組每月月和日:
select month(date) m, day(date) d, count(*) from reviews group by m, d;
這一起避免了這個問題,但可能會更加複雜,你在你的應用程序邏輯處理。不過,我認爲這是一個更好的方法來做到這一點。