私は与えられた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ステートメントに誤った列名があります。 isWeeked isWeekendにする必要があります。また、DAYOFWEEKは1から7を返します。 – Kickstart
ありがとうございました。 – Sam