如何从 mysql 中的 DATE_SUB 中排除周末
How to exclude weekends from DATE_SUB in mysql
有谁知道如何从 MYSQL 中的 DATE_SUB 函数中排除周末?我想从 CURDATE() 搜索过去 1500 个工作日,但正在努力寻找解决方案?
非常感谢任何指导。
我知道之前有人在 Whosebug 上问过这个问题(请参阅下面的 link),但我无法让他的解决方案起作用
SET @zi = '2015.07.25';
SET @n =6;
SELECT DATE_SUB(
@zi,
INTERVAL CASE
WHEN DAYOFWEEK(@zi)=1 THEN (@n +(FLOOR((@n-0.5)/5)+1)*2 - 1)
WHEN DAYOFWEEK(@zi)=2 THEN (@n +(FLOOR((@n-0.5)/5)+1)*2)
WHEN DAYOFWEEK(@zi)=3 THEN (@n-1 +(FLOOR(((@n-1)-0.5)/5)+1)*2 + 1)
WHEN DAYOFWEEK(@zi)=4 THEN (@n-2 +(FLOOR(((@n-2)-0.5)/5)+1)*2 + 2)
WHEN DAYOFWEEK(@zi)=5 THEN (@n-3 +(FLOOR(((@n-3)-0.5)/5)+1)*2 + 3)
WHEN DAYOFWEEK(@zi)=6 THEN (@n-4 +(FLOOR(((@n-4)-0.5)/5)+1)*2 + 4)
WHEN DAYOFWEEK(@zi)=7 THEN (@n-5 +(FLOOR(((@n-5)-0.5)/5)+1)*2 + 5)
END DAY
);
@zi
是日期。你可以给任何日期。
@n
是您要减去的工作天数。
给出的答案对我不起作用,它有时甚至给出未来的日期,它返回的日期是星期日或其他类似的错误。
有谁知道如何从 MYSQL 中的 DATE_SUB 函数中排除周末?我想从 CURDATE() 搜索过去 1500 个工作日,但正在努力寻找解决方案?
非常感谢任何指导。
我知道之前有人在 Whosebug 上问过这个问题(请参阅下面的 link),但我无法让他的解决方案起作用
SET @zi = '2015.07.25';
SET @n =6;
SELECT DATE_SUB(
@zi,
INTERVAL CASE
WHEN DAYOFWEEK(@zi)=1 THEN (@n +(FLOOR((@n-0.5)/5)+1)*2 - 1)
WHEN DAYOFWEEK(@zi)=2 THEN (@n +(FLOOR((@n-0.5)/5)+1)*2)
WHEN DAYOFWEEK(@zi)=3 THEN (@n-1 +(FLOOR(((@n-1)-0.5)/5)+1)*2 + 1)
WHEN DAYOFWEEK(@zi)=4 THEN (@n-2 +(FLOOR(((@n-2)-0.5)/5)+1)*2 + 2)
WHEN DAYOFWEEK(@zi)=5 THEN (@n-3 +(FLOOR(((@n-3)-0.5)/5)+1)*2 + 3)
WHEN DAYOFWEEK(@zi)=6 THEN (@n-4 +(FLOOR(((@n-4)-0.5)/5)+1)*2 + 4)
WHEN DAYOFWEEK(@zi)=7 THEN (@n-5 +(FLOOR(((@n-5)-0.5)/5)+1)*2 + 5)
END DAY
);
@zi
是日期。你可以给任何日期。
@n
是您要减去的工作天数。
给出的答案对我不起作用,它有时甚至给出未来的日期,它返回的日期是星期日或其他类似的错误。