2015-12-23 3 views
0

Я пытаюсь скопировать некоторые значения из таблицы в таблицу и преобразовать дату типа строки фактического типа даты, используя этот запрос:Игнорировать str_to_date ошибки

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; 

Однако некоторые строки имеют MIS-отформатированные строку даты и запрос дает мне эту ошибку:

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

Могу ли я как-то игнорировать эту ошибку и оставить столбец даты на его значение по умолчанию и продолжать копировать остальные строки?

ответ

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 vs LIKE и найти подходящую инструкцию regex, которая может подтвердить дату (im пытается найти работоспособную сейчас)

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