Spójrz na STR_TO_DATE funkcja:
UPDATE yourtable
SET
new_column = STR_TO_DATE(varchar_date, '%m-%d-%Y')
WHERE
STR_TO_DATE(varchar_date, '%m-%d-%Y') IS NOT NULL
A potem to samo zapytanie, z formatem daty jako '%m/%d/%Y'
, a następnie ponownie z '%M %D, %Y'
.Jeśli format się nie zgadza, STR_TO_DATE zwróci NULL i wiersze nie zostaną zaktualizowane.
Jeśli chcesz wstawić istniejące dane do nowej tabeli, możesz użyć czegoś takiego:
INSERT INTO new_table (ID, col1, col2, new_column)
SELECT
ID, col1, col2,
COALESCE(STR_TO_DATE(varchar_date, '%m-%d-%Y'),
STR_TO_DATE(varchar_date, '%m/%d/%Y'),
STR_TO_DATE(varchar_date, '%M %D, %Y'))
FROM oldtable
(nowa_kolumna to kolumna z datą, a następnie możesz sformatować, jak chcesz, używając PHP lub używając DATE_FORMAT)