假设我有
> 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做这个?
答案 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 演示