ISO 標準によると、年の週番号 1 は、開始年にその日の大半が含まれる最初の週であり、week(date,1)
'2012-12-31' の場合は週 53week(date,3)
をweekofyear(date)
返します。標準なので、次のようになります。
weekofyear('2013-01-01') = weekofyear('2012-12-31') = 1
-- week starts on Monday, and 2012-12-31 is part of the first week of 2013
weekofyear('2012-01-01') = weekofyear('2011-12-31') = 52
-- last week of 2011 starts on 12-26, first week of 2012 starts on 01-02
weekofyear('2010-01-01') = weekofyear('2009-12-31') = 53
-- some years have 53 weeks
weekofyear('2007-01-01') != weekofyear('2006-12-31')
-- that's correct because the first day of 2007 was a Monday
あなたのリクエストはより具体的であるため、2 つの日が同じ年の同じ週に含まれているかどうかを確認する必要がある場合でも、これでは質問に答えるには不十分です。
week
、またはを使用する代わりに、関数weekofyear
を使用することをお勧めします。これは、上記と同じ週番号を返しますが、今週が参照する年が前に付いています。yearweek(date,mode)
mode=3
yearweek('2013-01-01', 3) = yearweek('2012-12-31', 3) = 201301
yearweek('2012-01-01', 3) = yearweek('2011-12-31', 3) = 201152
yearweek('2010-01-01', 3) = yearweek('2009-12-31', 3) = 200952
yearweek('2007-01-01', 3) != yearweek('2006-12-31', 3)
したがって、クエリは次のようになります。
SELECT COUNT(*) AS `cnt`
FROM `orders`
WHERE YEARWEEK(`date_purchased`, 3) = YEARWEEK(DATE(), 3)