8

我需要从 MySQL select 语句中的日期计算出几周。其中一张表中有一个日期列,我需要计算距离日期还有多少周。

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 回答