Bienvenido a proyecto online, ahora hallarás la resolución que buscas.
Solución:
Utilizar str_to_date()
para manejar la conversión.
str_to_date('2016-12-4', '%Y-%m-%d');
SELECT CAST('2016-12-4' AS DATE);
–> 2016-12-04
así que no necesitas str_to_date
.
Agregaría una nueva columna para la fecha (ALTER TABLE .. ADD COLUMN ..
); UPDATE
para establecer la nueva columna. Luego corrija manualmente cualquier valor realmente desordenado. Finalmente DROP COLUMN
y RENAME COLUMN
;
ORDER BY
a VARCHAR
que contiene una fecha puede dar lugar a respuestas incorrectas. (Ene y Nov pueden confundirse). Las pruebas para fechas específicas pueden fallar. (Falta el 0 inicial.)
E indexar la columna FECHA hará que ciertas consultas sean más rápidas.
Cambiar la columna VARCHAR a una columna DATE tampoco es un problema.
Tabla de prueba y datos
CREATE TABLE test.t1( `date_start` VARCHAR(20) );
INSERT INTO test.test1 VALUES('2016-1-5');
INSERT INTO test.test1 VALUES('2016-1-5');
INSERT INTO test.test1 VALUES('2016-12-5');
INSERT INTO test.test1 VALUES('2016-12-6');
Seleccione el resultado de la consulta.
SELECT * FROM test.test1
date_start
------------
2016-1-5
2016-1-5
2016-12-5
2016-12-6
Cambie la columna VARCHAR a FECHA
ALTER TABLE test.test1 CHANGE date_start date_start DATE NULL;
Seleccione el resultado de la consulta.
SELECT * FROM test.test1
date_start
------------
2016-01-05
2016-01-05
2016-12-05
2016-12-06