У меня очень простой стол, конструкция которого выглядит так:
id int
info varchar
user varchar
start_date datatime
end_date datatime
resources_id int
Мне нужно вставить много строк (например, в течение следующих двух лет), которые будут иметь данные только для рабочих дней - данные из полей являются простой копией, но я не знаю, как подготовить вставку для такого рода рабочих дней. Можно ли вообще это сделать?
И мой пример файла дампа выглядит так:
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_date, end_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)