0

今週からすべてのレコードを取得する必要があります。しかし、12 月 31 日月曜日は 2012 年だったので、mysql はそれを 2013 年の第 1 週ではなく第 53 週として扱います。

クエリ:

SELECT COUNT(*) AS `cnt`
FROM `orders`
WHERE WEEK(`date_purchased`, 1) = WEEK(NOW(), 1)
    AND (
           (
            MONTH(`date_purchased`) = MONTH(NOW() - INTERVAL 1 WEEK)
            AND YEAR(`date_purchased`) = YEAR(NOW() - INTERVAL 1 WEEK)
            )
        OR (
            MONTH(`date_purchased`) = MONTH(NOW())
            AND YEAR(`date_purchased`) = YEAR(NOW())
            )
        )
4

4 に答える 4

2

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)
于 2013-01-07T06:56:30.440 に答える
0

使用する

SELECT COUNT(*) AS `cnt`
    FROM `orders`
    WHERE SUBDATE(CURDATE(), WEEKDAY(CURDATE())) <= `date_purchased`
        AND `date_purchased` < ADDDATE(CURDATE(), 7 - WEEKDAY(CURDATE()));
于 2013-01-07T07:05:14.700 に答える
0

yearweek() を使ってみましたか?

yearweek('2012-12-31',1) と yearweek('2013-01-01',1) はどちらも同じ結果になります。

yearweek を計算するにはさまざまな方法があり、それが引数 "1" の目的です。完全なリストについては、http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week を参照してください

于 2013-01-08T15:51:55.750 に答える
-1

非常に似ていますが、少し異なる質問/問題もあります(もちろん、彼の質問を誤解していない限り)。

また、今週のすべてをリストする必要があります (私の場合、これは映画館で上映される映画です)。

ただし、私の場合は、たとえば、2013 年 12 月 30 日、2013 年 12 月 31 日、2014 年 1 月 2 日に上映される映画があり、2013 年代の週の一部にいる場合、そのすべての映画を見るために必要です。現在の週 (2014 年に投影されるものも含む) と、2014 年の一部の週に再びすべての映画 (2013 年に投影されるものも含む) を見ることができます。

もちろん、コードを変更せずに毎年動作する必要があるため、毎年の週数を手動で指定したり、年を手動で指定したりする必要はありません。

これが私の現在のSQLクエリです:

SELECT * FROM #__cinema_dates AS d LEFT JOIN #__cinema_film AS f on d.fid=f.id WHERE WEEK(d.date) = WEEK(CURDATE()) ORDER BY d.date ASC
于 2013-11-26T13:40:12.077 に答える