#mysql #database #automation
Вопрос:
Я создал таблицу, в которой необходимо хранить дату и различные переменные, чтобы я мог использовать ее в качестве основы для большого набора данных. Мне нужно предварительно заполнить даты для набора данных, чтобы не было пропущенных значений. стол:
---------- ----------- ------ ----- --------------------- -------
| Field | Type | Null | Key | Default | Extra |
---------- ----------- ------ ----- --------------------- -------
| Alt | smallint | YES | | NULL | |
| Lat | smallint | YES | | NULL | |
| Lon | smallint | YES | | NULL | |
| Rate | float | YES | | NULL | |
| dateTime | timestamp | NO | PRI | 2000-01-01 00:00:00 | |
---------- ----------- ------ ----- --------------------- -------
Мне нужно добавить строки от «2000-01-01 00:00:00 до «2019-12-30 00:00:00», которые увеличиваются на 3 часа и имеют все остальные переменные как нулевые. И я хочу сделать процесс как можно более автоматизированным, чтобы я мог позволить ему работать, и он заполнит строки для диапазона дат
например, строки будут null, null,null,null 2000-01-01 00:00:00 null, null,null 2000-01-01 03:00:00 null, null,null 2000-01-01 06:00:00
Комментарии:
1. что
select version();
дает?
Ответ №1:
Вы можете использовать комбинацию DATE_ADD
и сценарий оболочки, это далеко за пределами оптимального, но работает:
INSERT INTO table (dateTime) VALUES ('2000-01-01 00:00:00')
А затем с помощью небольшого скрипта оболочки:
for X in {1..999}; do
mysql -e "SELECT dateTime INTO @d FROM a ORDER BY dateTime DESC LIMIT 1; INSERT INTO a (dateTime) VALUES (DATE_ADD(@d, INTERVAL 3 HOUR));"
done
Вы даже можете сделать выбор раньше, чтобы узнать текущую дату внутри цикла.
Комментарии:
1. Программа
-e
выполняет команду на сервере и завершает работу.2. Когда я попробовал это, я получил сообщение об ошибке 1046 (3D000) в строке 1: База данных не выбрана. должно ли @d быть именем базы данных? Я смог справиться с проблемами доступа
3. Да, я привел пример, добавьте свою базу данных раньше
-e
вот так:mysql mydb -e '...'