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