在另一个给定日期间隔(期间)内计算日期间隔(期间)的天数

时间:2012-03-08 20:59:34

标签: mysql sql date intervals between

我有一个问题,但部分问题是由this question解决,但我知道我想知道如何计算给定间隔之间的日子。

这是一个计算员工去度假的天数的查询。因此给定(或未给出)日期范围,我想计算在给定间隔之间有多少休假日。

当前我的SQL是这样的:

SELECT SUM(DATEDIFF(vacation_end_date,vacation_start_date))
FROM vacation WHERE vacation_end_date >= given_start_date 
AND vacation_start_date <= given_end_date'

我知道DATEDIFF只能在给定范围内工作几天,但不应该在给定范围之外计算天数。

请帮助我,在Stack Overflow上找不到类似的内容。

2 个答案:

答案 0 :(得分:4)

如果vacation_end_date是该人返回度假的日子,而不是他最后一天的假期,那么该查询将在2012-01-01(含)和2013-01-之间获得该人的假期01(独家)将是;

SELECT SUM(
 GREATEST(0, 
  DATEDIFF(
   LEAST('2013-01-01', vacation_end_date),
   GREATEST('2012-01-01', vacation_start_date)
))) 'VACATION_DAYS'
FROM vacation;

如果vacation_end_date是他的最后一个休假日,您需要在上面的查询中将vacation_end_date替换为ADDDATE(vacation_end_date, INTERVAL 1 DAY)),以使计算正确。

简单演示here

答案 1 :(得分:1)

如果我正确理解了您的问题,使用COUNT可以获得您想要的内容:

SELECT COUNT(
        DATEDIFF(vacation_end_date,
            if(vacation_start_date < given_start_date, 
                given_start_date,
                vacation_start_date)
        )
    )
FROM vacation WHERE vacation_end_date >= given_start_date 
AND vacation_start_date <= given_end_date'