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

标签 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 上找不到类似的东西。

最佳答案

如果 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 .

关于mysql - 计算另一个给定日期间隔(期间)内的日期间隔(期间)的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624857/

相关文章:

php - 错误消息无法从 php 获取正确的值

php - 通过ajax与数据库通信

php - SQL 将 ORDER BY 结果作为数组返回

jquery - 使用 AJAX 监视 SQL 数据库的更改

sql - sqlQuery 的 RODBC 错误处理

php - 在 mysql 中给外键起别名

sql - 在 TSQL 中检查两个日期时间是否在同一日历日的好方法是什么?

r - 使用 Lubridate 将 R 中的字符列转换为日期

javascript - JQuery ui - 日期选择器、日期格式

date - 如何将日期从一种格式转换为另一种golang格式