2017-12-16 3 views
0
SELECT * FROM `customers` where warranty_end BETWEEN '01/12/2017' AND '31/12/2017' 

die obige ist meine Frage, in warranty_end Spalte Inhalt ist 30/12/2018.Mysql wählen Sie Abfrage nicht richtig funktioniert

Aber die Abfrage resultierende Zeile aus der Datenbank.

enter image description here

+0

Was ist der Datentyp der Spalte warranty_end? – Imran

+0

varchar (255) @Imran – sandeep

+0

'varchar' ist eine Zeichenfolge, kein Datum. Da "varchar", "30/12/2018" nur ein Bündel von Buchstaben ist, hat es nichts mit dem 12. Dezember 2018 zu tun. Verwenden Sie ['DATE'] (https://dev.mysql.com/doc/refman /5.7/de/date-and-time-types.html) um Daten zu speichern. – axiac

Antwort

2

Es ist wie Ihre warranty_end Spalte aussieht, ist Text, und darüber hinaus Sie speichern Ihre Termine gibt es eine nicht-ISO-Format. Eine Abhilfe wäre hier die Textdaten in tatsächliche Daten konvertieren STR_TO_DATE mit:

SELECT * 
FROM customers 
WHERE STR_TO_DATE(warranty_end, '%d/%m/%Y') BETWEEN '2017-12-01' AND '2017-12-31'; 

Hinweis hier, dass die BETWEEN Klausel in der Tat verwendet ISO Datumsliterale.

In Zukunft wäre eine viel bessere Option, Ihre Garantie Enddaten in einer Datumsspalte, z. datetime.

+0

fertig, danke ... – sandeep

+0

@sundeep Können Sie diese Antwort korrekt markieren? Grünes Häkchen nach links. –