Question

Hé les gars, je suis juste essayer de tirer tous les enregistrements de ma base de données qui ont un rec_date (varchar) stockés sous forme d / m / Y et sont expirés (comme dans moins de curdate()), et cet appel est pas me donner ce que je veux:

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'

Je fais évidemment quelque chose de mal, alors pouvez-vous aider?

Était-ce utile?

La solution

Je suis d'accord avec zerkms que les types de données appropriés devraient être utilisés chaque fois que possible. Dans le cas contraire, vous devez utiliser un sous-requête pour convertir la chaîne / varchar en un type de données DATE / HEURE premier:

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

Autres conseils

Le droit chemin - est de stocker des données dans le type de champ approprié. Utilisez le type "date" au lieu de "varchar".

de toute façon -. Vous pouvez utiliser pour formater DATE_FORMAT rec_date à chaîne droite dans la clause WHERE et le comparer à curdate ()

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top