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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top