Различное поведение str_to_date в операторе SELECT и INSERT - PullRequest
0 голосов
/ 22 ноября 2018

У меня та же проблема, что и в этом вопросе - MySQL Невозможно вставить WHERE STR_TO_DATE IS NULL .

Я хочу перенести даты из одной базы данных в другую.Даты в исходной базе данных хранятся как varchars и не всегда действительны - например, иногда есть значение типа «nb» или какая-то другая строка, иногда они равны нулю.Использование str_to_date () в операторе SELECT работает нормально - если предоставленная строка не соответствует предоставленному формату, она возвращает ноль.Это поведение, которое я хочу, но в операторе INSERT.К сожалению, при попытке сделать это, я получаю следующую ошибку:

SQL Error (1411): Incorrect datetime value: 'n.b.' for function str_to_date

Есть ли у вас какие-либо советы, чтобы избежать этого поведения?

Я использую MariaDB, если это имеет значение.

РЕДАКТИРОВАТЬ 1: Это мое заявление вставки:

insert into person
(id, firstname, lastname, date_of_birth, place_of_birth, gender, old_id)
select
vm.person_id, 
 IFNULL(wv.vorname, '') as firstname, 
 IFNULL(wv.NAME, '') as lastname, 
STR_TO_DATE(wv.geburtsdatum, '%e.%c.%Y') as date_of_birth, 
null as place_of_birth, 
case
    when wv.anrede = 'Herr' then 'm'
    when wv.anrede = 'Frau' then 'w'
    else 'x'
end as gender, 
 vm.old_id
from b.helper_table vm
join a.orig_table wv
on vm.old_id = wv.id;

1 Ответ

0 голосов
/ 22 ноября 2018

Работало с регулярным выражением - спасибо @ MatBailie.

insert into person
(id, firstname, lastname, date_of_birth, place_of_birth, gender, old_id)
select
vm.person_id, 
IFNULL(wv.vorname, '') as firstname, 
IFNULL(wv.name, '') as lastname, 
case
    when wv.geburtsdatum REGEXP '^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}$' then 
    str_to_date(wv.geburtsdatum, '%e.%c.%Y')
end as date_of_birth, 
null as place_of_birth, 
case 
    when wv.anrede = 'Herr' then 'm'
    when wv.anrede = 'Frau' then 'w'
    else 'x'
end as gender, 
 vm.old_id
from b.helper_table vm
join a.orig_table wv
on vm.old_id = wv.id;
...