6 Stimmen

Abrufen von Daten zwischen zwei Datumszeichenfolgen in MySQL

Ich habe Twitter-Daten für ein Projekt, an dem ich arbeite, aufgezeichnet, wobei die Datumsinformationen als Thu, 14 Jul 2011 06:21:48 +0000 in einem String-Feld.

Wie wähle ich mit mySQL Daten aus, die zwischen zwei Datumsangaben liegen? Ich kann Daten erhalten, die größer als ein Wert oder kleiner als ein Wert sind, aber nicht zwischen zwei Werten.

Die Daten sind zum Beispiel:

Thu, 14 Jul 2011 06:21:48 +0000
Thu, 14 Jul 2011 12:18:21 +0000
Thu, 14 Jul 2011 18:48:00 +0000
Thu, 14 Jul 2011 23:48:02 +0000
Fri, 15 Jul 2011 06:48:10 +0000
Fri, 15 Jul 2011 12:48:00 +0000
Fri, 15 Jul 2011 18:43:32 +0000
Fri, 15 Jul 2011 23:44:08 +0000
Sat, 16 Jul 2011 06:47:08 +0000
Sat, 16 Jul 2011 12:46:49 +0000
Sat, 16 Jul 2011 18:45:41 +0000
Sat, 16 Jul 2011 23:41:27 +0000

Mein SQL-String lautet:

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '2011-06-15' 
AND SUBSTR(twitter_date, 6, 11) <= '2011-06-21'

Ich habe versucht BETWEEN Erklärungen, aber kein Glück.

Für jede Hilfe sind wir dankbar!

8voto

Noah Punkte 1936

Sie können "between" nicht verwenden, da es sich um Zeichenketten und nicht um echte Datumsfelder handelt. Wenn Sie wissen, dass das Format des Datums immer dasselbe ist, können Sie Folgendes tun: STR_TO_DATE(str,format)

SELECT * 
FROM twitter 
WHERE STR_TO_DATE(twitter_date, '%a, %c %b %Y %k:%i:%s') 
      between '2011-06-15' AND '2011-06-21'

2voto

sap Punkte 1121

Sie vergleichen "6 Jul 2011" mit 2011-06-15.

Es sollte sein

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '6 Jul 2011' 
AND SUBSTR(twitter_date, 6, 11) <= '21 Jul 2011'

0voto

Jim Punkte 22031

Vielleicht sollten Sie sich MySQLs STR_TO_DATE Funktion. Dadurch erhalten Sie ein Datum, und zwischen sollte wie erwartet funktionieren.

0voto

Marc B Punkte 347897

Die Abfrage wird fehlschlagen. Du vergleichst zwei STRINGS, keine Daten. Sie müssen MySQL explizit mitteilen, dass Sie die Strings als Datumsangaben behandeln wollen. Da es sich um Datumsinformationen handelt, speichern Sie sie in einem Datums- oder Datetime-Feldtyp in MySQL, was Ihnen diese ganze Mühe erspart:

SELECT STR_TO_DATE(SUBSTR(twitter_date, 6, 11)) >= '2011-06-15' ...

Wenn Sie die linke Seite dazu zwingen, ein richtiger Datumswert zu sein, wird MySQL darauf hingewiesen, dass es die rechte Seite ebenfalls als Datum behandeln soll.

0voto

Dave Rix Punkte 1501

Wenn Sie Ihre Tabelle so geändert haben, dass die Datumsdaten in richtigen DATETIME-Feldern gespeichert werden, können Sie meine Antwort auf die folgende Frage zu Datumsangaben und deren Filterung lesen, die sich als nützlich erweisen könnte.

Was würde zum Beispiel in Ihrer Abfrage / Ihren Daten oben passieren, wenn Sie für eines der Daten, die Sie abfragen, keine Daten hätten? Sie würden keine Ausgabe für dieses Datum erhalten, was bei der Erstellung von Diagrammen usw. merkwürdig aussehen könnte. Wenn Sie die Technik verwenden, die ich in der angehängten Frage beschreibe, können Sie diese zusätzlichen Informationen und andere nützliche Informationen wie den Wochentag, den Monatsnamen usw. erhalten.

Alle Monate innerhalb der angegebenen Datumsspanne auswählen, einschließlich derer mit 0 Werten

Ich hoffe, das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X