忽略str_to_date错误

时间:2015-12-23 23:29:11

标签: mysql datetime

我正在尝试将一些值从表复制到表,并使用此查询将字符串类型日期转换为实际日期类型:

update ignore sorted_tc
inner join ana on ana.TCKIMLIKNO = sorted_tc.TCKIMLIKNO
set sorted_tc.ADI = ana.ADI,
sorted_tc.SOYADI = ana.SOYADI,
sorted_tc.ANAADI = ana.ANAADI,
sorted_tc.BABAADI = ana.BABAADI,
sorted_tc.DOGUMYERI = ana.DOGUMYERI,
sorted_tc.DOGUMTARIHI = STR_TO_DATE(ana.DOGUMTARIHI, '%e/%c/%Y'),
sorted_tc.NUFUSILI = ana.NUFUSILI,
sorted_tc.NUFUSILCESI = ana.NUFUSILCESI,
sorted_tc.ADRESILI = ana.ADRESILCEADI,
sorted_tc.ADRESILCESI = ana.ADRESILCEADI;

但是,某些行的日期字符串格式错误,查询给出了这个错误:

Error (1411): Incorrect datetime value: '//1930' for function str_to_date

我可以以某种方式忽略此错误并将日期列保留为其默认值并继续复制其他行吗?

1 个答案:

答案 0 :(得分:0)

也许这个?

update ignore sorted_tc
inner join ana on ana.TCKIMLIKNO = sorted_tc.TCKIMLIKNO
set sorted_tc.ADI = ana.ADI,
sorted_tc.SOYADI = ana.SOYADI,
sorted_tc.ANAADI = ana.ANAADI,
sorted_tc.BABAADI = ana.BABAADI,
sorted_tc.DOGUMYERI = ana.DOGUMYERI,
sorted_tc.DOGUMTARIHI = 
    CASE WHEN 
        ana.DOGUMTARIHI LIKE '__/__/____' 
     or ana.DOGUMTARIHI LIKE '_/_/____'
     or ana.DOGUMTARIHI LIKE '_/__/____'
     or ana.DOGUMTARIHI LIKE '__/_/____'
    THEN
        STR_TO_DATE(ana.DOGUMTARIHI, '%e/%c/%Y')
    ELSE
        'some default date here'
    end,
sorted_tc.NUFUSILI = ana.NUFUSILI,
sorted_tc.NUFUSILCESI = ana.NUFUSILCESI,
sorted_tc.ADRESILI = ana.ADRESILCEADI,
sorted_tc.ADRESILCESI = ana.ADRESILCEADI;

这可能会让您完成更新..但它不会检查超出范围的任何月份或日期。您可以使用REGEXP与LIKE并找到一个合适的正则表达式语句,可以验证日期(我现在试图找到一个可行的)