我有一个问题,但部分问题是由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上找不到类似的内容。
答案 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'