我需要从 MySQL select 语句中的日期计算出几周。其中一张表中有一个日期列,我需要计算距离日期还有多少周。
SELECT EventDate, (calculation) AS WeeksOut FROM Events;
例子:
- 还有 6 天,几周后 = 0
- 7 天后,几周后 = 1
- 13 天后,几周后 = 1
- 14 天后,几周后 = 2
我需要从 MySQL select 语句中的日期计算出几周。其中一张表中有一个日期列,我需要计算距离日期还有多少周。
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;