добавьте дату увеличения в таблицу mysql для диапазона дат

#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 '...'