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?

¿Fue útil?

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 ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top