Оператор MySQL REGEXP
пригодится здесь:
UPDATE tablename
SET date_col = CASE WHEN columnA REGEXP '[0-9]{2}/[0-9]{2}/[0-9]{4}'
THEN STR_TO_DATE(columnA, '%m/%d/%Y)
ELSE NULL END;
Нет смысла обновлять columnA
со строки на дату, потому что типы не совпадают. Лучшая стратегия - создать новый столбец для хранения даты. Кроме того, я рекомендую использовать NULL
, а не 0000-00-00
, для представления строки даты, которая не может быть проанализирована.
Обратите внимание, что регулярное выражение, которое я использовал, не является надежным и не полностью проверяет ваши строки дат. Но это должно по крайней мере отсеять строковые данные, которые действительно отключены.