mySql中如何计算给定范围内的日期差

mySql中如何计算给定范围内的日期差,mysql,sql,database,date,Mysql,Sql,Database,Date,假设我有一个包含两个日期列的表leave\u management 从和到日期“2016-12-11”和“2016-12-18” 现在,我想要给定输入的输出 1. 输入:从:“2016-12-7”到:2016-12-10 输出:日期差异为0(未发现重叠) 2. 输入:从:“2016-12-16”到:2016-12-18 输出:日期差为2(此范围与表格数据完全重叠) 3. 输入:从:“2016-12-18”到:2016-12-20 输出:日期差为1(该范围与表格数据部分重叠) 这里,计数公式

假设我有一个包含两个日期列的表leave\u management 和到日期“2016-12-11”和“2016-12-18”


现在,我想要给定输入的输出

1.
输入:从:“2016-12-7”到:2016-12-10
输出:日期差异0(未发现重叠)

2.
输入:从:“2016-12-16”到:2016-12-18
输出:日期差2(此范围与表格数据完全重叠)

3.
输入:从:“2016-12-18”到:2016-12-20
输出:日期差1(该范围与表格数据部分重叠)

这里,计数公式日期差=(给定日期之间的差异-重叠计数)

我试过这样的问题

SELECT sum((DATEDIFF(from_date, to_date)) 
FROM `leave_management` s1 
WHERE s1.from_date <='2016-12-20' AND s1.to_date >='2016-12-18'
选择sum((DATEDIFF(从日期到日期))
从“休假管理”1
其中s1.from_date='2016-12-18'

这只能为前两个输入提供完美的输出。但对于第三个输入,它无法提供预期的输出。请帮助我。

您可以使用mysql的peroid_diff函数来确定差异

SELECT PERIOD_DIFF(from,to) Diff_months table1;

请参阅此

如果我理解正确,您希望使用
least()
grest()

选择总和(DATEDIFF(最大值(从'2016-12-18'日期起),最小值(从'2016-12-20'日期起)
从“休假管理”1
其中s1.from_date='2016-12-18';

需要注意的是,根据结束日期是否算作重叠,您可能需要从常数中加/减一天。

您能否编辑您的问题并以实际表格的形式向我们展示示例数据,以及您期望的输出和逻辑描述?您所说的“:solve”是什么意思??您的意思是从select输出了一行吗?通过“失败”,您的意思是没有得到一行,或者结果不正确。日期差公式=(给定日期之间的差-重叠计数)。但是我的查询只获取日期差异=给定日期之间的差异。因此,我获取前两个输入,它们是否在范围内。但第三个输入部分匹配,因此日期差异不会给我正确的输出。因为在这里我无法实现重叠计数。我希望这些输出用于给定的输入…非常感谢。它有效。sum((DATEDIFF)(最大值(从日期开始,“+startDate+”),最少(到日期结束,“+endDate+”)*-1)+1)在我的情况下……再次感谢。在进行求和之前,您还需要检查diff>0,因为case#1将使用此查询得到负diff。@XmoůXmoŜ……where应该防止任何负值。这不是所谓的。谢谢你,没有任何样本数据。因此,一个通用的答案可以指导该人员实现其目标
SELECT sum(DATEDIFF(greatest(from_date, '2016-12-18'), least(to_date, '2016-12-20')) 
FROM `leave_management` s1 
WHERE s1.from_date <='2016-12-20' AND s1.to_date >= '2016-12-18';