Domanda

Ciao ragazzi, sto solo cercando di tirare tutti i record di mia base di dati che hanno un rec_date (varchar) memorizzati come g / m / Y e sono scaduti (come nel caso, meno di curdate()), e questa chiamata non è darmi quello che voglio:

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'

Sono ovviamente facendo qualcosa di sbagliato, in modo da poter aiutare?

È stato utile?

Soluzione

Sono d'accordo con zerkms che opportuni tipi di dati dovrebbero essere utilizzati per quanto possibile. In caso contrario, è necessario utilizzare una sottoquery per convertire la stringa / varchar in un tipo DATE / dati TIME prima:

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

Altri suggerimenti

Il modo giusto - è quello di memorizzare i dati in una corretta tipo di campo. Utilizzare tipo "Data" invece di "varchar".

in ogni caso -. È possibile utilizzare per formattare DATE_FORMAT rec_date a corda giusta nella clausola WHERE e confrontarlo con CURDATE ()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top