MySQL select ステートメントの日付から週を計算する必要があります。テーブルの 1 つに日付列があり、その日付から何週間離れているかを計算する必要があります。
SELECT EventDate, (calculation) AS WeeksOut FROM Events;
例:
- 6 日後、数週間後 = 0
- 7 日後、数週間後 = 1
- 13 日後、数週間後 = 1
- 14 日後、数週間後 = 2
MySQL select ステートメントの日付から週を計算する必要があります。テーブルの 1 つに日付列があり、その日付から何週間離れているかを計算する必要があります。
SELECT EventDate, (calculation) AS WeeksOut FROM Events;
例:
DATEDIFF 関数を使用します。
ROUND(DATEDIFF(end_date, start_date)/7, 0) AS weeksout
WEEKS の問題は、1 月 1 日をまたぐ日付に対して正しい結果が返されないことです。
は、関数0
で使用する小数点以下の桁数です。ROUND
「お正月」号を乗り切り、それでも を使いたい場合はWEEK()
、次の方法が非常に効果的であることがわかりました。
SELECT
YEAR(end_date)*52+WEEK(end_date)
- YEAR(start_date)*52 - WEEK(start_date) as weeks_out
FROM
events;
この方法との違い (方法とは対照的にDATEDIFF
) は、週に合わせていることです。したがって、今日 (月曜日) と先週の金曜日は1
このメソッドを使用して返さ0
れますが、DATEDIFF
メソッドで返されます。
これを行う簡単な方法は次のとおりです。
SELECT EventDate, (week(EventDate) - week(curdate())) AS WeeksOut FROM Events;
例:
mysql> select week('2010-11-18') - week ('2010-10-18');
+------------------------------------------+
| week('2010-11-18') - week ('2010-10-18') |
+------------------------------------------+
| 4 |
+------------------------------------------+
1 row in set (0.00 sec)
別のオプションは、間隔を日数で計算し、7 で割ることです。
SELECT EventDate, datediff(EventDate,curdate())/7 AS WeeksOut FROM Events;
例:
mysql> select datediff('2010-11-18' , '2010-10-18') / 7;
+-------------------------------------------+
| datediff('2010-11-18' , '2010-10-18') / 7 |
+-------------------------------------------+
| 4.4286 |
+-------------------------------------------+
1 row in set (0.00 sec)
MYSQL の新しいバージョンでは、タイムスタンプを列の型として使用する場合、 TIMESTAMPDIFFを使用できます。
SELECT TIMESTAMPDIFF(WEEK, '2020-06-09 08:59:36', '2020-09-09 08:58:25');
|-----------------------------------------------------------------------|
| 13 |
したがって、あなたの例では次のようになります。
SELECT TIMESTAMPDIFF(WEEK, NOW(), EventDate) AS WeeksOut FROM Events;