2012-12-03 17 views
6

Ich habe diese Abfrage, ich muss alle Datensätze zwischen zwei Daten auswählen, die MySQL-Tabelle ist ein Datetime-Format.Wählen Sie alle Datensätze zwischen zwei Datetime-Format

Ich habe das versucht, aber es hat nicht funktioniert.

select * from cdr 
WHERE calldate BETWEEN '2012-12-01' AND '2012-12-03'; 
+0

Kannst du genauer sein? Was war die Fehlermeldung oder ein unerwünschtes Ergebnis? –

Antwort

11

Versuchen Sie stattdessen:

select * from cdr 
WHERE DATE(calldate) BETWEEN '20121201' AND '20121203'; 
+0

Vielen Dank :) Wieder! –

+1

Passen Sie auf, das wird Ihre Leistung auf großen Tischen töten, da der Index nicht mehr funktioniert. –

+0

Diese Antwort ignoriert Indizes und ist eine schlechte Übung. Sie sollten den Feldwert unverändert verwenden und Ihre Daten in einem Format konvertieren. Sie sollten stattdessen @Rohit Suthars Antwort verwenden. –

-1

Die oben wird große arbeiten. Wenn Sie zusätzliche Bedingungen, normale Boolesche Logik arbeitet mit Datum/Uhrzeit als auch hinzufügen wollten, so dass Sie so etwas wie

... 
where DATE(calldate) < '20121201' AND DATE(calldate) >= '20121203' OR DATE(calldate) = '20121205' 

nur ein einfaches Beispiel tun könnten.

1

Diese Abfrage - ", aber es hat nicht funktioniert"

SELECT * FROM cdr WHERE calldate BETWEEN str_to_date('2012-12-01','%Y-%m-%d') AND str_to_date('2012-12-03','%Y-%m-%d'); 
+0

Dieses funktioniert tatsächlich und ist eine gute Übung, da es die Daten unter Verwendung des angegebenen Formats konvertiert und Indizes verwendet. –

+1

Wenn ich auch einen Zeitstempel hinzufügen möchte, wie würde ich das tun. 'str_to_date ('2017-10-20 14:00:00', '% Y-% m-% d% H:% i:% s')' – virtualLast

Verwandte Themen