MySQL Date_Format Vergleich zu Curdate () Abfrage
-
20-09-2019 - |
Frage
Hey Leute, ich versuche nur, alle Datensätze aus meiner Datenbank zu ziehen, die einen rec_date (varchar) als m/d/y gespeichert haben und abgelaufen sind (wie in weniger als in curdate()
), und dieser Anruf gibt mir nicht das, was ich will:
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'
Ich mache offensichtlich etwas falsch, also kannst du helfen?
Lösung
Ich stimme ZerKMs zu, dass geeignete Datentypen nach Möglichkeit verwendet werden sollten. Andernfalls müssen Sie eine Unterabfrage verwenden, um die Zeichenfolge/VARCHAR zuerst in einen Datum/Zeit -Datentyp umzuwandeln:
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()
Andere Tipps
Der richtige Weg - besteht darin, Daten im richtigen Feldtyp zu speichern. Verwenden Sie "Datums" -Typ anstelle von "varchar".
Wie auch immer - Sie können Datum_Format verwenden, um rec_date zu formatieren, um direkt in der Klausel zu streiten und es mit Curdate () zu vergleichen.