Comparing date ranges

后端 未结 10 1434
予麋鹿
予麋鹿 2020-11-22 16:10

In MySQL, If I have a list of date ranges (range-start and range-end). e.g.

10/06/1983 to 14/06/1983
15/07/1983 to 16/07/1983
18/07/1983 to 18/07/1983
         


        
10条回答
  •  梦谈多话
    2020-11-22 16:28

    I created function to deal with this problem in MySQL. Just convert the dates to seconds before use.

    DELIMITER ;;
    
    CREATE FUNCTION overlap_interval(x INT,y INT,a INT,b INT)
    RETURNS INTEGER DETERMINISTIC
    BEGIN
    DECLARE
        overlap_amount INTEGER;
        IF (((x <= a) AND (a < y)) OR ((x < b) AND (b <= y)) OR (a < x AND y < b)) THEN
            IF (x < a) THEN
                IF (y < b) THEN
                    SET overlap_amount = y - a;
                ELSE
                    SET overlap_amount = b - a;
                END IF;
            ELSE
                IF (y < b) THEN
                    SET overlap_amount = y - x;
                ELSE
                    SET overlap_amount = b - x;
                END IF;
            END IF;
        ELSE
            SET overlap_amount = 0;
        END IF;
        RETURN overlap_amount;
    END ;;
    
    DELIMITER ;
    

提交回复
热议问题