0
我一直试图在2个给定日期之间得到周末天数(周六和周日)。返回周末天的MySQL函数
我碰到这样的解决方案:http://crossedlogic.blogspot.ca/2008/09/using-sql-to-find-work-days-in-date.html
当我调用该函数,它返回作为输出消息OK,我想它返回的周末两天的计数来代替。
我在做什么错?
代码:
DROP FUNCTION IF EXISTS `fn_GET_WEEKEND_DAYS`;
DELIMITER $$
CREATE FUNCTION `fn_GET_WEEKEND_DAYS`(StartDate DATE, EndDate DATE) RETURNS INT
BEGIN
# declare the variables.
DECLARE varDays INT;
# create the temprorary table to insert the data in.
CREATE TEMPORARY TABLE temp(calendarDate DATE, isWeekend TINYINT(1));
# insert the starting date.
INSERT INTO temp VALUES(StartDate, NULL);
# insert each day by increment of 1 day untill reached the end date.
WHILE (SELECT MAX(CalendarDate) FROM temp) < EndDate DO
INSERT INTO temp
SELECT ADDDATE(MAX(CalendarDate), INTERVAL 1 DAY), NULL
FROM temp;
END WHILE;
# update the is weekend field depending if the day of week of each row is 1 or 7. (saturday or sunday)
UPDATE temp SET isWeekend = CASE WHEN DAYOFWEEK(calendarDate) IN (1, 7) THEN true ELSE false END;
# count the date that are weekends.
SELECT COUNT(calendarDate) INTO varDays FROM temp WHERE isWeekend = true;
# drop the temp table.
DROP TEMPORARY TABLE IF EXISTS temp;
RETURN varDays;
END $$
TEST:
SELECT fn_GET_WEEKEND_DAYS(CURDATE(), ADDDATE(CURDATE(), INTERVAL 10 DAY)) AS TEST;
任何帮助和建议将不胜感激。
不是问题,但有一个问题是您在UPDATE语句中有一个misspelt列名。被认为应该是周末。此外,DAYOFWEEK会返回1至7. – Kickstart
谢谢您指出。 – Sam