繁体   English   中英

MYSQL - 计算当月开始日期和结束日期之间的天数

[英]MYSQL - Calculate days in the current month between start date and end date

请帮助解决 MYSQL 中的以下问题说明:

我有一个 start_date 和 end_date。 我需要计算当前月份到当前日期的 start_date 和 end_date 之间的天数。

示例 1:

start_date = "2020-06-27"
end_date = "2020-09-27"

Since today's date is 2020-08-11 (11th Aug 2020). I need 11 as the output.

示例 2:

start_date = "2020-08-08"
end_date = "2020-08-09"
I need 2 as the output.

示例 3:

start_date = "2020-08-08"
end_date = "2020-08-14"
I need 4 as the output because current date is 11th Aug.

我已经尝试过,datediff,period_diff,但还没有成功。 请在这里寻求帮助。

感谢您查看问题陈述。

我认为是这样的:

SELECT DATEDIFF(
    LEAST(DATE_FORMAT(NOW(),"%Y-%m-%d"),"2020-08-14"),
    GREATEST("2020-08-08",DATE_FORMAT(NOW(),"%Y-%m-01"))
)+1;

我猜你的第二个问题的答案必须是 2

您可以使用 MySql 的日期函数与 minimum() 和 best() 来调整边界:

select datediff(
    least(end_date, current_date),
    greatest(start_date, last_day(current_date - interval 1 month) + interval 1 day)
  ) + 1 difference
from tablename  

请参阅演示
结果:

| difference |
| ---------- |
| 11         |
| 2          |
| 4          |

您可以尝试MONTH function 的 MySQL 与DATEDIFF的组合,例如

select 
case 
 WHEN (MONTH(startDate)!==MONTH(CURDATE()) && MONTH(endDate)!==MONTH(CURDATE()))
    THEN DATEDIFF(STR_TO_DATE(ADD_START_DATE_OF_MONTH,'%d,%m,%Y'),CURDATE()) AS days
 WHEN MONTH(startDate)!==MONTH(CURDATE())
    THEN DATEDIFF(CURDATE(),STR_TO_DATE(endDate, '%m/%d/%Y')) AS days
 WHEN MONTH(endDate)!==MONTH(CURDATE())
    THEN DATEDIFF(STR_TO_DATE(startDate, '%m/%d/%Y'), CURDATE()) AS days
  ELSE
    DATEDIFF(STR_TO_DATE(startDate, '%m/%d/%Y'), STR_TO_DATE(endDate, '%m/%d/%Y')) AS days

mysql 的所有日期时间函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM