Mysql如何统计从和之间的日子?

时间:2013-12-14 18:25:34

标签: mysql sql date datetime

假设我有

     > ID               FromDate                         ToDate 
     > --              --------                         -------
     > 1               '2013-12-14 00:00:00'         '2013-12-23 00:00:00'
     > 2               '2013-12-24 00:00:00'         '2013-12-31 00:00:00'

对于我的场景,用户从'2013-12-14 00:00:00'搜索到'2013-12-29 00:00:00'

总天数为“15”。 我想输出像这样的东西

 > ID                  FromDate                         ToDate                countdays
 > --              --------                         -------
 > 1               '2013-12-14 00:00:00'         '2013-12-23 00:00:00'         9
 > 2               '2013-12-24 00:00:00'         '2013-12-31 00:00:00'         6

9 + 6 = 15

第一行fromdate和todate介于用户fromdate和todate之间,因此countdays为9 第二行我想要从'2013-12-24 00:00:00'到'2013-12-29 00:00:00'计算天数我怎么能用mysql做这个?

2 个答案:

答案 0 :(得分:1)

<强> SQL    选择ID,FromDate,ToDate,DATEDIFF(DAY,ToDate,FromDate)作为TableName的计数

SQL中的语法:

  

DATEDIFF(日期部分,开始日期,结束日期)

<强> MYSQL

Select ID, FromDate, ToDate , DATEDIFF(ToDate, FromDate) As Count From TableName

示例:

DATEDIFF(expr1,expr2)

DATEDIFF() returns expr1 – expr2 expressed as a value in days from one date to the other. expr1 and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation.

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
        -> 1
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
        -> -31

来源:Date Difference documentation by MYSQL

希望这有帮助

答案 1 :(得分:0)

你可以这样试试

SELECT t.*, 
       DATE(LEAST(t.todate, s.todate)) 
     - DATE(GREATEST(t.fromdate, s.fromdate)) countdays
  FROM table1 t CROSS JOIN
(
  SELECT '2013-12-14 00:00:00' fromdate,
         '2013-12-29 00:00:00' todate
) s
 WHERE s.fromdate BETWEEN t.fromdate AND t.todate
    OR s.todate   BETWEEN t.fromdate AND t.todate

这是 SQLFiddle 演示