MySQL comparación DATE_FORMAT a CURDATE () consulta
-
20-09-2019 - |
Pregunta
Hola chicos, estoy tratando de tirar de todos los registros de mi base de datos que tienen una rec_date (varchar) almacenados como m / d / Y y se cumplan (como en, menos de curdate()
), y esta llamada no se me da lo que quiero:
SELECT member_id,
status,
DATE_FORMAT(STR_TO_DATE(rec_date, '%m/%d/%Y'), '%Y-%m-%d') AS rec
FROM members
WHERE rec_date > CURDATE()
AND status = '1'
Obviamente estoy haciendo algo mal, por lo que puede ayudar?
Solución
Estoy de acuerdo con zerkms que los tipos de datos apropiados deben ser utilizados siempre que sea posible. De lo contrario, usted tiene que utilizar una subconsulta para convertir la cadena / varchar en un tipo de datos de fecha / hora avanza primero:
SELECT x.member_id,
x.status,
DATE_FORMAT(x.rec_dt, '%Y-%m-%d')
FROM (SELECT m.member_id,
m.status,
STR_TO_DATE(m.rec_date, '%m/%d/%Y') AS rec_dt
FROM MEMBERS m
WHERE m.status = '1') x
WHERE x.rec_dt < CURDATE()
Otros consejos
La forma correcta - es almacenar los datos en el tipo de campo apropiado. Utilizar el tipo "fecha" en lugar de "varchar".
de todos modos -. DATE_FORMAT puede utilizar para dar formato a la cadena rec_date derecha en la cláusula WHERE y compararlo con CURDATE ()