2014-01-19 2 views
1

В моей ситуации мне нужно иметь дело с недопустимыми значениями даты, например: '04070 $'. Мне нужно вставить что-то, даже если я получаю ошибочные данные, например: «04070 $».Усеченное неправильное значение даты

Когда я делаю:

select str_to_date('04070$','%m%d%Y') from dual; 

Результат:

2000-04-07 

Но для вставки заявления, я получаю сообщение об ошибке:

INSERT INTO `table1` (`Date_Posted`) VALUES (str_to_date('04070$','%m%d%Y')) 

#1292 - Truncated incorrect date value: '04070$' 

Я не понимаю, почему оператор выбора работает отлично, а инструкция insert дает ошибку. Есть ли способ сделать заявление вставки вставить NULL или дату (даже если это неверно), когда представлены такие неправильные значения?

ответ

0

Оператор Select, а также оператор Insert выдают ошибку, так как $ wont считается числом. Он должен быть

INSERT INTO `table1` (`Date_Posted`) VALUES (str_to_date('040709','%m%d%Y')). 

для вставки в таблицу 1 с записью 2009-04-07

+0

Нет, оператор select не дал никаких ошибок. – coolscitist

+0

Да, это дает MySQL 1292 Ошибка: Усеченное неправильное значение даты: '04070 $' –

+0

Возможно, это дало это в вашей системе. Это не дает мне. Должна быть проблема с конфигурацией. – coolscitist

0

Заменить

INSERT INTO `table1` (`Date_Posted`) VALUES (str_to_date('04070$','%m%d%Y')) 

По

INSERT INTO table1(Date_Posted) VALUES (str_to_date('04070','%m%d%Y')) 
0

Хотя ваш вопрос действителен. Но имейте в виду, что это предупреждение, а не ошибка.

Ряд также вставлен в этом случае. Я перекрестно проверил это с примером, и он отлично работает.

Поскольку MySQL всегда усекает значение столбца после сопоставления с соответствующим типом данных и обрезает непревзойденные данные или значения вне диапазона из полной строки.

Пример: Если вы хотите вставить «ABCDEFGHIHJHJ» в char (3), он обрезает строку и вставляет ABC в строку.

Смежные вопросы