我需要使用 mysql 查找两个日期之间的星期日数。我知道如何使用 PHP 进行计算,但我需要使用 mysql 进行计算。
最佳答案
SET @START_DATE = '2014-01-22';
SET @END_DATE = '2014-06-29';
SELECT
ROUND((
(unix_timestamp(@END_DATE) - unix_timestamp(@START_DATE) ) /(24*60*60)
-7+WEEKDAY(@START_DATE)-WEEKDAY(@END_DATE)
)/7)
+ if(WEEKDAY(@START_DATE) <= 6, 1, 0)
+ if(WEEKDAY(@END_DATE) >= 6, 1, 0) as Sundays;
解决方案由两部分组成:
- 计算完整周数(ROUND 部分),显然 7 周内有 7 个星期日。
- 计算非整周部分(第一个或最后一个)中包含的天数
如果你需要多次使用它,你可以将它包装到函数中:
DROP function IF EXISTS `count_weekdays`;
DELIMITER $$
CREATE FUNCTION `count_weekdays` (startDate date, endDate date, wd int)
RETURNS INTEGER
BEGIN
RETURN ROUND((
(unix_timestamp(endDate) - unix_timestamp(startDate) ) /(24*60*60)
-7+WEEKDAY(startDate)-WEEKDAY(endDate)
)/7)
+ if(WEEKDAY(startDate) <= wd, 1, 0)
+ if(WEEKDAY(endDate) >= wd, 1, 0);
END$$
DELIMITER ;
然后你就可以像这样使用它了:
SET @START_DATE = '2018-07-03';
SET @END_DATE = '2018-07-28';
select
count_weekdays(@START_DATE, @END_DATE, 6) as Sundays,
count_weekdays(@START_DATE, @END_DATE, 5)
+ count_weekdays(@START_DATE, @END_DATE, 6) as weekends;
其中 6 ~ 工作日数代表周日,5 ~ 周六。
关于mysql - 如何使用mysql计算两个日期之间的星期日数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22165407/