我需要从我的MySQL Select语句中的日期开始计算几周。其中一个表中有一个日期列,我需要计算日期的几周。

SELECT EventDate, (calculation) AS WeeksOut FROM Events;

例子:

  • 距离6天,几周= 0
  • 距离7天,几周= 1
  • 13天,几周= 1
  • 14天,几周= 2
有帮助吗?

解决方案

使用 约会功能:

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

几周的问题在于,它不会返回1月1日越过日期的正确结果。

0 是在 ROUND 功能。

其他提示

这是一种简单的方法:

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)

为了克服整个“新年”问题,您仍然想使用 WEEK(), ,我发现以下方法非常有效。

SELECT 
    YEAR(end_date)*52+WEEK(end_date)
    - YEAR(start_date)*52 - WEEK(start_date) as weeks_out
FROM
    events;

这种方法的区别(相反 DATEDIFF 方法)是它与本周保持一致。所以今天(星期一)和上周五将返回 1 使用此方法,但会返回 0DATEDIFF 方法

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top