MySQL:如何计算从特定日期算起的周数?
我需要计算从MySQL select语句中的日期算起的周数。其中一个表中有一个日期列,我需要计算距离该日期还有多少周MySQL:如何计算从特定日期算起的周数?,sql,mysql,date-manipulation,Sql,Mysql,Date Manipulation,我需要计算从MySQL select语句中的日期算起的周数。其中一个表中有一个日期列,我需要计算距离该日期还有多少周 SELECT EventDate, (calculation) AS WeeksOut FROM Events; 例如: mysql> select week('2010-11-18') - week ('2010-10-18'); +------------------------------------------+ | week('2010-11-18') - we
SELECT EventDate, (calculation) 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)
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)
- 6天之后,每周=0
- 7天之后,每周=1
- 13天之后,每周=1
- 14天之后,每周=2
0
是函数中要使用的小数位数。这里有一个简单的方法:
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)
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)
另一个选项是以天为单位计算时间间隔并除以7:
SELECT EventDate, datediff(EventDate,curdate())/7 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)
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)
为了克服整个“新年”问题,你仍然想使用,我发现下面的方法非常有效
SELECT
YEAR(end_date)*52+WEEK(end_date)
- YEAR(start_date)*52 - WEEK(start_date) as weeks_out
FROM
events;
此方法(与
DATEDIFF
方法相反)的不同之处在于它与周对齐。因此,今天(周一)和上周五将使用此方法返回1
,但在较新版本的MYSQL中,使用DATEDIFF
方法返回0
,如果使用as列类型,则可以使用:
因此,在您的示例中,它将是:
SELECT TIMESTAMPDIFF(WEEK, NOW(), EventDate) AS WeeksOut FROM Events;
部分周你想做什么?例如:3.2857周应该是3周、4周还是介于两者之间?是的,应该四舍五入到my Side最接近的整周解释+1。如果日期在同一年内,您的(第一个)解决方案才有效。例如,当事件发生在一月,而现在是十二月时,它将不起作用。加上一个,但是你能添加到文档的链接以获得更好的解释吗。为什么在7之后是0?@JohnMax:添加了关于0的信息。