SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.06.2008 15:40:09

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Проблема с столбцом DATETIME при загрузке данных

Есть таблица типа:

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, но все сработает sad.

В чем может быть проблема?

Вот скрипт загрузки:

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')
;

Неактивен

 

#2 25.06.2008 15:57:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема с столбцом DATETIME при загрузке данных

Ему не нравится дробная часть секунд. Попробуйте, например, выделить часть
строки до точки, и потом эту часть уже преобразовать в дату.

Неактивен

 

#3 25.06.2008 16:05:13

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Re: Проблема с столбцом DATETIME при загрузке данных

Я пробовал варианты:
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');
?

Неактивен

 

#4 25.06.2008 16:07:14

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Re: Проблема с столбцом DATETIME при загрузке данных

>...Попробуйте, например, выделить часть строки до точки
А как это сделать?
Мне миллисекунды, вообще говоря, не очень нужны.

Неактивен

 

#5 25.06.2008 17:00:55

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Re: Проблема с столбцом DATETIME при загрузке данных

Решил проблему так:
DT_INS = str_to_date(SUBSTRING_INDEX(@DT_INS,".",1),'%Y-%m-%d %H:%i:%s')

Спасибо! smile

Неактивен

 

#6 25.06.2008 17:04:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема с столбцом DATETIME при загрузке данных

Код:

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. Ну, собственно, Вы сами нашли функцию smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson