comparaison MySQL DATE_FORMAT à la requête CURDATE ()
-
20-09-2019 - |
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?
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 ()