select和insert语句中str\u to\u date的不同行为

tktrz96b  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(435)

我有和这个问题相同的问题-mysql无法插入str\u to\u date为空的位置。
我想把数据从一个数据库迁移到另一个数据库。原始数据库中的日期存储为varchars,并不总是有效的—例如,有时有一个类似“n.b.”的值或其他字符串,有时它们是空的。在select语句中使用str \u to \u 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;
3zwtqj6y

3zwtqj6y1#

它与正则表达式一起工作-感谢@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;

相关问题