2016-10-05 7 views
2

Ich habe eine Tabelle mit der Bezeichnung barcode_log, und das sind alle Daten aus der Tabelle.mysql BETWEEN Datumsbereich funktioniert nicht

All results

Und jetzt, wenn ich diese Abfrage ausführen

SELECT * FROM `barcode_log` WHERE barcode_log.assign_time BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND CURRENT_DATE; 

ich dieses Ergebnis

query result

Aber es sollten alle Zeilen zurück, da alle Daten innerhalb dieser ist nur Monat. Und assign_time Feld wird als datetime gespeichert. Irgendeine Idee, was ich falsch mache ??

+0

Ist "BETWEEN" inklusive? Weil das morgen funktionieren könnte. Sie vergleichen Termine, nicht Zeiten. –

+1

Vielleicht könnte nur das Datum von 'barcode_log.assign_time' funktionieren:' WO DATE (barcode_log.assign_time) ZWISCHEN ... ' –

+0

@BartFriederichs, ja dazwischen ist inklusive. – 1000111

Antwort

2

Sie ignorieren den time Teil (hh:mm:ss).

Wenn der Endtag auf den Endzeitstempel des aktuellen Datums eingestellt ist, können Sie auch die Daten des aktuellen Tages abrufen.

ZWISCHEN ist inklusive

SELECT 
    * 
FROM 
    `barcode_log` 
WHERE 
    barcode_log.assign_time BETWEEN DATE_SUB(
     CURRENT_DATE, 
     INTERVAL 30 DAY 
    ) 
AND TIMESTAMP(CONCAT(CURDATE(),' ','23:59:59')); 
+0

Danke. Das hat funktioniert. Wusste nicht, dass BETWEEN inklusive ist. –

+1

'SELECT 2 ZWISCHEN 2 UND 3;' - Dieses einfachste Beispiel zeigt das "zwischen" einschließende Verhalten sehr gut. – 1000111

2

Während die akzeptierte Antwort funktioniert, gibt es eine einfachere Lösung ist. Nehmen Sie einfach den Datumsteil der Datetime-Spalte:

SELECT 
    * 
FROM 
    `barcode_log` 
WHERE 
    DATE(barcode_log.assign_time) 
    BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND CURRENT_DATE; 
+0

Schöne Art, dies durch den Datumsteil zu behandeln. Ein potentielles Problem ist jedoch, dass der Index im 'assign_time' Feld nicht benutzt werden kann (falls vorhanden). – 1000111

Verwandte Themen