MySQL:如何计算特定日期的周数?

时间:2010-10-18 14:58:47

标签: sql mysql date-manipulation

我需要计算MySQL select语句中日期的周数。其中一个表中有一个日期列,我需要计算该日期的周数。

SELECT EventDate, (calculation) AS WeeksOut FROM Events;

示例:

  • 6天后,周数= 0
  • 7天后,周数= 1
  • 13天之后,数周之外= 1
  • 14天之后,数周之外= 2

4 个答案:

答案 0 :(得分:17)

使用DATEDIFF function

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

WEEKS的问题在于它不会为1月1日之前的日期返回正确的结果。

0ROUND函数中使用的小数位数。

答案 1 :(得分:3)

这是一个简单的方法:

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)

答案 2 :(得分: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

答案 3 :(得分:0)

在较新版本的MYSQL中,如果您使用timestamp作为列类型,则可以使用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;