我有与此问题相同的问题-MySQL Unable to insert WHERE STR_TO_DATE IS NULL。
我想将日期从一个数据库迁移到另一个数据库。原始数据库中的日期存储为varchars,并且并不总是有效的-例如,有时存在类似“ n.b”的值。或其他字符串,有时它们为null。在SELECT语句中使用str_to_date()可以正常工作-如果提供的字符串与提供的格式不匹配,则返回null。这是我想要的行为,但是在INSERT语句中。不幸的是,当尝试这样做时,出现以下错误:
SQL Error (1411): Incorrect datetime value: 'n.b.' for function str_to_date
您有一些建议来避免这种行为吗?
如果这很重要,我正在使用MariaDB。
编辑1:
这是我的INSERT语句:
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;
最佳答案
它可以使用正则表达式-感谢@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;
关于mysql - SELECT和INSERT语句中str_to_date的不同行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53428820/