Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица типа:
CREATE TABLE table1 (
DT_INS DATETIME,
col1 VARCHAR(50),
col2 DECIMAL(6,4),
...
);
в которую нада загрузить данные типа:
2007-10-05 16:00:35.057000000|"Bla bla"|1.4|...
НО при попытке сконвертировать данные при загрузки с помощью LOAD DATA:
DT_INS = str_to_date(@DT_INS,'%Y-%m-%d %H:%i:%s')
вылетает ошибка:
ERROR 1292 (22007): Truncated incorrect datetime value: '2007-10-05 16:00:35.057
000000'
Хотя, если вставить дату-время и формат в простой SELECT, но все сработает .
В чем может быть проблема?
Вот скрипт загрузки:
LOAD DATA INFILE 'data.csv'
INTO TABLE table1
FIELDS
TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
lines
terminated by '\n'
IGNORE 1 LINES
(
@DT_INS ,
col1,
col2
)
SET
DT_INS = str_to_date(@DT_INS,'%Y-%m-%d %H:%i:%s')
;
Неактивен
Ему не нравится дробная часть секунд. Попробуйте, например, выделить часть
строки до точки, и потом эту часть уже преобразовать в дату.
Неактивен
Я пробовал варианты:
DT_INS = str_to_date(@DT_INS,'%Y-%m-%d %H:%i:%s.')
DT_INS = str_to_date(@DT_INS,'%Y-%m-%d %H:%i:%s.%f')
- но это не помогло.
Не понятно, почему тогда работает:
SELECT str_to_date('2007-10-05 16:00:35.057000000', '%Y-%m-%d %H:%i:%s');
?
Неактивен
>...Попробуйте, например, выделить часть строки до точки
А как это сделать?
Мне миллисекунды, вообще говоря, не очень нужны.
Неактивен
Решил проблему так:
DT_INS = str_to_date(SUBSTRING_INDEX(@DT_INS,".",1),'%Y-%m-%d %H:%i:%s')
Спасибо!
Неактивен
mysql> SELECT SUBSTRING_INDEX('2007-10-05 16:00:35.057000000', '.', 1); +----------------------------------------------------------+ | SUBSTRING_INDEX('2007-10-05 16:00:35.057000000', '.', 1) | +----------------------------------------------------------+ | 2007-10-05 16:00:35 | +----------------------------------------------------------+ 1 row in set (0.05 sec)
UPD. Ну, собственно, Вы сами нашли функцию
Неактивен