2016-07-21 11 views
0

Ich habe in MySQL, varchar Spalte, wo die Daten im Format d/m/Y gespeichert sind, dachte ältere Eingaben sind nur m/Y.MySQL vergleichen benutzerdefiniertes Datum zu jetzt

Ich habe Abfrage die älteste Datensatz auszuwählen:

SELECT expire 
FROM logs 
WHERE log_id = :logid AND STR_TO_DATE(expire, '%d/%m/%Y') > NOW() 
ORDER BY STR_TO_DATE(expire, '%d/%m/%Y') ASC LIMIT 0,1" 

aber diese Rückkehr nichts, wenn das Datum ohne ‚d‘ im alten Format gespeichert (als m/Y) in der Datenbank, wie ich zurückkehren die Zeile mit UND ohne d?

+0

1. „SELECT FROM Protokolle ablaufen WHERE log_id =: LOGID“ ausführen und überprüfen Sie Ihre Ergebnisse? –

Antwort

2

können Sie überprüfen die Länge des str

SELECT expire 
FROM logs 
WHERE log_id = :logid 
AND CASE length(expire) 
     WHEN 10 THEN STR_TO_DATE(expire, '%d/%m/%Y') > NOW() 
     WHEN 7 THEN STR_TO_DATE(expire, '%m/%Y) > NOW() 
     END 
ORDER BY STR_TO_DATE(expire, '%d/%m/%Y') ASC LIMIT 0,1; 
+0

Dies hat den Trick, jedoch habe ich Längen 10 und 7 dh . (01/1990) und 01/01/1990). – Diamonte

+0

Danke .. ich habe die Antwort mit der richtigen Länge aktualisiert. – scaisEdge