8

MySQL select ステートメントの日付から週を計算する必要があります。テーブルの 1 つに日付列があり、その日付から何週間離れているかを計算する必要があります。

SELECT EventDate, (calculation) AS WeeksOut FROM Events;

例:

  • 6 日後、数週間後 = 0
  • 7 日後、数週間後 = 1
  • 13 日後、数週間後 = 1
  • 14 日後、数週間後 = 2
4

4 に答える 4

20

DATEDIFF 関数を使用します。

ROUND(DATEDIFF(end_date, start_date)/7, 0) AS weeksout

WEEKS の問題は、1 月 1 日をまたぐ日付に対して正しい結果が返されないことです。

は、関数0で使用する小数点以下の桁数です。ROUND

于 2010-10-18T15:05:29.137 に答える
3

「お正月」号を乗り切り、それでも を使いたい場合は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メソッドで返されます。

于 2014-11-03T17:18:53.427 に答える
2

これを行う簡単な方法は次のとおりです。

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)
于 2010-10-18T15:07:15.453 に答える
1

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;
于 2020-06-09T08:57:59.870 に答える