zoukankan      html  css  js  c++  java
  • 统计当前日期距离月底有多少工作日的函数

        今天遇到运营那边有个需求,需要找出注册用户排除周六周日的每日打卡情况(包含不是周六周日的当天),当时的第一反应是想找一个能实现排除周六周日能计算到月底还有多少工作日的函数,找了半天没找到,还是自己写一个吧。我崇拜的王大哥也写了一个,贴出来和大家分享。代码如下:
     

    点击(此处)折叠或打开

    1. DROP FUNCTION IF EXISTS count_day_left ;
    2. DELIMITER //
    3. CREATE FUNCTION count_day_left( f_date DATETIME )
    4. RETURNS INT
    5. DETERMINISTIC
    6. BEGIN
    7. /*
    8.     Purpose: 统计指定日期距离月底还有多少个工作日,节假日未排除,用于打卡统计的过滤函数
    9.     Author: 飞鸿无痕
    10.     Date: 2012-10-09
    11.     Useage: select count_day_left('2012-09-10');
    12. */
    13.   DECLARE start_day INT;
    14.   DECLARE end_day INT;
    15.   DECLARE count_day INT DEFAULT 0;
    16.   DECLARE tmp_date DATE DEFAULT DATE(f_date);
    17.   SET end_day=DAY(LAST_DAY(f_date));
    18.   SET start_day=DAY(f_date);
    19.   WHILE start_day<=end_day DO
    20.         IF ( (DAYOFWEEK(tmp_date) = 1) OR (DAYOFWEEK(tmp_date) = 7)) THEN
    21.             SET tmp_date=DATE_ADD(tmp_date,INTERVAL 1 DAY);
    22.             SET start_day=start_day+1;
    23.         ELSE
    24.         SET tmp_date=DATE_ADD(tmp_date,INTERVAL 1 DAY);
    25.         SET start_day=start_day+1;
    26.         SET count_day=count_day+1;
    27.         END IF;

    28.   END WHILE;
    29.   RETURN count_day;
    30. END //
    31. DELIMITER ;

    点击(此处)折叠或打开

    1. DROP FUNCTION IF EXISTS count_day_left;
    2. DELIMITER //
    3. CREATE FUNCTION count_day_left(f_date DATE)
    4. RETURNS INT
    5. READS SQL DATA
    6. BEGIN
    7. RETURN DATEDIFF(LAST_DAY(f_date),f_date)-(WEEK(LAST_DAY(f_date))-WEEK(f_date))*2+IF(WEEKDAY(f_date)=6,0,1)-IF(WEEKDAY(LAST_DAY(f_date))=5,1,0);
    8. END //
    9. DELIMITER ;

  • 相关阅读:
    线段树学习笔记
    树状数组学习笔记
    P1816 忠诚 ST表模版
    NOIP 2017 D1T2 时间复杂度
    Ubuntu镜像源
    字符串数据结构模板
    白书的一些奇怪模板
    高精度模板
    大整数类模板
    线段树模板1
  • 原文地址:https://www.cnblogs.com/feihongwuhen/p/7169782.html
Copyright © 2011-2022 走看看