我需要计算MySQL select语句中日期的周数。其中一个表中有一个日期列,我需要计算该日期的周数。
SELECT EventDate, (calculation) AS WeeksOut FROM Events;
示例:
答案 0 :(得分:17)
ROUND(DATEDIFF(end_date, start_date)/7, 0) AS weeksout
WEEKS的问题在于它不会为1月1日之前的日期返回正确的结果。
0
是ROUND
函数中使用的小数位数。
答案 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;