如何在mysql中从DATE_SUB中排除周末

时间:2015-07-04 10:47:47

标签: mysql mysql-workbench

有谁知道如何从MYSQL中的DATE_SUB函数中排除周末?我期待从CURDATE()过去1500个工作日内搜索,但我正在努力解决这个问题?

非常感谢任何指导。

我知道之前在stackoverflow上询问了这个问题(请参阅下面的链接),但我无法让他的解决方案工作

How do you exclude weekends from a date_sub?

1 个答案:

答案 0 :(得分:1)

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是您要减去的工作日数。

给出的答案对我不起作用,有时甚至会在将来给出日期,它会返回星期日的日期或其他类似的错误。