Ich habe eine Tabelle, die eine datetime-Spalte enthält. Ich möchte alle Aufzeichnungen eines bestimmten Tages unabhängig von der Uhrzeit zurückgeben. Mit anderen Worten, wenn meine Tabelle nur die folgenden 4 Datensätze enthält, werden nur der 2. und 3. zurückgegeben, wenn ich mich auf den 25.12.2012 beschränke.
2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00
Antworten:
Verwenden Sie NIEMALS einen Selektor wie
DATE(datecolumns) = '2012-12-24'
- es ist ein Leistungskiller:DATE()
für alle Zeilen berechnet , einschließlich derjenigen, die nicht übereinstimmenEs ist viel schneller zu bedienen
Dies ermöglicht die Verwendung des Index ohne Berechnung.
BEARBEITEN
Wie Used_By_Already hervorhob, sind in der Zeit seit der ersten Antwort im Jahr 2012 Versionen von MySQL aufgetaucht, bei denen die Verwendung von '23: 59: 59 'als Tagesende nicht mehr sicher ist. Eine aktualisierte Version sollte lesen
Der Kern der Antwort, dh die Vermeidung eines Selektors für einen berechneten Ausdruck, bleibt natürlich bestehen.
quelle
WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY
. Es vermeidet 0 Zeit und arbeitet fürDATE
,DATETIME
,DATETIME(6)
, etc. Und beschäftigt sich mit Schalttag etc.... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
funktioniert möglicherweise besser (wenn Sie einen Index für date_column haben) alsDATE
.quelle
BETWEEN
Lösung ... hat jemand eine Markierung?BETWEEN
ist nur eine Art zu schreibenfield >= value1 and fied<= value2
.Sie können verwenden
%
:quelle