mySql中如何计算给定范围内的日期差
假设我有一个包含两个日期列的表leave\u management 从和到日期“2016-12-11”和“2016-12-18”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(该范围与表格数据部分重叠) 这里,计数公式
现在,我想要给定输入的输出 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';