SQL Преобразует Int во время

#sql #time #int

#sql #время #int

Вопрос:

я пытаюсь импортировать данные из текстового файла в базу данных SQL. Файл использует TAB not для разделения полей. Моя проблема при импорте заключалась в том, что когда я записываю время, которое задается как Int, это полностью портит импорт.

Часть текстового файла:

Норт Феликс 2011-07-01 0422 0,47 0012 0,69 2109 0,55 1311 1,44
Норт Феликс 2011-07-02 0459 0,43 0048 0,72 2140 0,55 1342 1,47
Норт Феликс 2011-07-03 0533 0,41 0123 0,75 2213 0,57 1412 1,46
Норт Феликс 2011-07-04 0605 0.41 0158 0.79 2244 0.59 1441 1.41

Результат моего запроса:

 INSERT INTO `dbc`.`history_long` (`Region`,`Location`,`Date`,`LT1-time`,`LT1-height`,`HT1-time`,`HT1-height`,`LT2-time`,`LT2-height`,`HT2-time`,`HT2-height`) 
values ('North','Felix','2011:00:00','422:00:00','0.47','12:00:00','0.69','2109:00:00','0.55','1311:00:00','1.44'),
('North','Felix','2011:00:00','459:00:00','0.43','48:00:00','0.72','2140:00:00','0.55','1342:00:00','1.47'),
('North','Felix','2011:00:00','533:00:00','0.41','123:00:00','0.75','2213:00:00','0.57','1412:00:00','1.46'),
('North','Felix','2011:00:00','605:00:00','0.41','158:00:00','0.79','2244:00:00','0.59','1441:00:00','1.41'),
  

Проблема, например, в том, что L2-время становится 2109:00:00 в столбце time. Есть ли способ преобразовать это из Int во время?

Комментарии:

1. Это не может быть близко к вашему реальному запросу, если только вы не используете самую совершенную реализацию SQL, которую я когда-либо видел. Имена столбцов разделяются запятыми в списке столбцов инструкции insert, а отдельные значения столбцов обычно предоставляются в виде отдельных параметров и / или литералов (опять же, через запятую). Итак, какой продукт SQL вы используете?

2. … и предоставляет реальный код с реальной датой

3. Извините, надеюсь, так будет лучше. Взгляните сейчас, и вы увидите данные, которые я считываю, из 4 строк вверху. В данный момент я импортирую его в Navicat, и это результат запроса, с которым я заканчиваю. Я также вручную написал запрос, аналогичный тому, что выдает Navicat, но только с использованием полного INT без : для разделения часов: минут: секунд, и база данных не примет его, поскольку в столбцах Time установлено значение time, поэтому он просто облажается. В исходном файле (текстовом файле) содержится около 160 000 строк данных, все они разделены табуляцией, а время указано в виде 4-значного числа 24 часов INT.

Ответ №1:

Вот как вы могли бы преобразовать int лайк 0422 в time значение:

 SELECT CAST('00:00' AS time)
       INTERVAL (@IntValue DIV 60) HOUR
       INTERVAL (@IntValue % 60) MINUTE
  

Не видя вашего запроса на импорт, невозможно сказать, как вы могли бы на самом деле его применить.