sql只在工作日插入数据

xoefb8l8  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(274)

我有一个非常简单的表,它的结构看起来像:

id           int
info         varchar
user         varchar
start_date   datatime
end_date     datatime
resources_id int

我必须插入许多行(例如未来两年),这些行只包含工作日的数据—字段中的数据只是一个简单的副本,但我不知道如何为这种特定的工作日准备insert。有可能这样做吗?
我的示例转储文件如下所示:

id   info   user     start_date            end_date              resource_id
31   NULL   aorlik   2018-01-04 08:00:00   2018-01-04 10:00:00   1
32   NULL   aorlik   2018-01-04 15:00:00   2018-01-04 17:00:00   1
41zrol4v

41zrol4v1#

干得好。
我创建了一个数据库函数来创建一整年的日期。你可以根据你的愿望来调整它,但你应该有这个想法。
它基本上在一年中的所有日子里循环,如果这一天恰好是一个 sat 或者 sun ,它跳过了日期。你可以随意改变。
为此,我创建了一个带有两个datetime字段(start\u date、end\u date)的测试表。在函数内部,我截断表,只是为了测试。

DROP PROCEDURE IF EXISTS create_date_for_year;

DELIMITER //

CREATE PROCEDURE create_date_for_year (IN year INT)
BEGIN
    DECLARE day INT DEFAULT 1;

    SET day=1;

    TRUNCATE test; -- JUST FOR TESTING!

    WHILE day < 366 DO  
        IF WEEKDAY(MAKEDATE(year, day)) NOT IN (5,6) THEN -- skip sat and sun
            INSERT INTO TEST (start_date, end_date) VALUES ( 
                CONCAT(MAKEDATE(year, day), ' ', MAKETIME(8,0,0)),
                CONCAT(MAKEDATE(year, day), ' ', MAKETIME(10,0,0))
                );
        END IF;
        SET day = day + 1;
    END WHILE;
END;

//

CALL create_date_for_year(2018)

相关问题