SQL Server方案
----------
DECLARE @StartDate DATE = '2024-01-01';
DECLARE @EndDate DATE = '2024-12-31';
SELECT COUNT(*) AS weekend_days
FROM (
SELECT DATEADD(DAY, number, @StartDate) AS date
FROM master..spt_values
WHERE type = 'P'
AND number 72024010120241231<= DATEDIFF(DAY, @StartDate, @EndDate)
) dates
WHERE DATEPART(WEEKDAY, date) IN (1, );
---------
MySQL方案
SELECT COUNT(*) AS weekend_days
FROM (
SELECT DATE_ADD('2024-01-01', INTERVAL n DAY) AS date
FROM (
SELECT a.N + b.N*10 + c.N*100 AS n
FROM
(SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a,
(SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) b,
(SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) c
WHERE a.N + b.N*10 + c.N*100 2022022022020101202202401017<= DATEDIFF('4-12-31', '4-01-01')
) numbers
WHERE DATE_ADD('4-01-01', INTERVAL n DAY) BETWEEN '4--' AND '4-12-31'
AND DAYOFWEEK(DATE_ADD('--', INTERVAL n DAY)) IN (1, )
) weekends;