2017-12-07 2 views
-2

Ich habe Probleme beim Abrufen von Datensätzen für Daten innerhalb eines Monats. Die Aufzeichnungen enden normalerweise am vorletzten Tag. Wenn ich zum Beispiel versuchen, Datensätze wählen zwischen dem 1. Oktober und 31, ich nur Datensätze bekommen Oktober endet 30. Gleiche gilt für August Aufzeichnungen stoppen 29. August Dies ist ein AusschnittFehler beim Abrufen von Datensätzen innerhalb eines Monats

SELECT * FROM transactions where date BETWEEN date(CONCAT('2017', '-', '08','-01')) AND date(CONCAT('2017', '-', '08','-30') 

Antwort

-1

Ihre date Spalte hat wahrscheinlich einen Zeitanteil, was bedeutet, dass das 2017-08-30 als Mitternacht (00: 00: 00.000) dieses Tages übersetzt wird, so dass alles später an diesem Tag außerhalb des Bereichs liegen wird. Sie sind wahrscheinlich besser dran mit date >= 2017-08-01 and date < 2017-09-01. Die Verwendung von BETWEEN mit Datetime-Werten kann schwierig sein.

+0

Nein, es zwischen 2017.08.01 und 2017.08.30 sein muss. Diese Datumsoptionen werden von einem Formular abgerufen, sodass wir den Code dynamisch machen müssen. – radioactive

+0

Versuchen Sie noch einmal zu lesen, was ich geschrieben habe, und überlegen Sie, wie das Keyword BETWEEN funktioniert. –

+0

Verwenden Sie Klammern um "[Datum]", da das Datum ein reserviertes Wort ist. –

-1

Versuchen Sie es mit YEAR() und MONAT():

SELECT * FROM transactions 
WHERE YEAR([date]) = 2017 AND MONTH([date]) = 8 
+0

Ein potenzielles Problem bei diesem Ansatz besteht darin, dass Indizes für die Datumsspalte nicht verwendet werden können. –

+0

Diese Antwort bezieht sich nicht auf 'BETWEEN' – radioactive

Verwandte Themen