Mysql sql仅在工作日内插入数据

Mysql sql仅在工作日内插入数据,mysql,sql,sql-insert,insert-into,Mysql,Sql,Sql Insert,Insert Into,我有一个非常简单的表,其结构如下: id int info varchar user varchar start_date datatime end_date datatime resources_id int 我必须插入许多行,例如,在接下来的两年中,只有工作日的数据-字段中的数据只是一个简单的副本,但我不知道如何为这种特定的工作日准备insert。有可能做到吗 我的示例转储文件如下所示: id info user

我有一个非常简单的表,其结构如下:

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
给你

我创建了一个数据库函数,可以创建一整年的日期。你可以根据自己的意愿对它进行微调,但你应该明白这一点

它基本上循环一年中的所有日子,如果这一天恰好是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)

我使用MySQL语言您想创建一个包含所有sql命令和所有日期的sql脚本文件吗?还是要创建一个脚本,将其直接插入表中。你可以用一个MYSQL函数来实现,或者使用python、php等工具。我只想只插入一次数据,所以我将使用哪种方法来实现这一点并不重要。。。最简单的方法总是最好的:嗨。你不清楚。为这种特定工作日准备插入意味着什么?用足够的词语表达你的意思。编辑您的帖子,评论不是为了澄清。您的数据当前在哪里?一个文件还是几个文件?本地数据库、远程机器或云?源数据是按日期时间顺序排列的,还是需要搜索?源数据是否经过验证,或者列中是否有一些可疑的值?它似乎是以制表符分隔的?对包含制表符或引号等的字符串进行转义/编码如何?这个问题目前非常模糊,无法回答。OP稍微澄清了他们的情况:他们有一个或多个转储文件,其中的数据要批量插入到他们的表中。但是还有很多其他的歧义。