2010-11-21 11 views

Antwort

3

Wenn Sie das Datum als String liefern, werden einige Formate implizit/automatisch auf den korrekten Datentyp der Spalte, die verglichen werden umgewandelt werden. IE:

SELECT t.id, 
     t.date 
    FROM TABLE t 
WHERE t.date < '2015-01-31' 
    AND t.date > '2011-11-31' 

Die sichersten Mittel, um ein Datum/Uhrzeit in einer Zeichenfolge zu einem DATETIME- Umwandlung ist die MySQL's STR_TO_DATE function zu verwenden:

WHERE t.date < STR_TO_DATE('1/31/2015', '%m/%d/%Y') 
    AND t.date > STR_TO_DATE('11/31/2011', '%m/%d/%Y') 
+0

Beachten Sie, dass 'STR_TO_DATE' eine Berechnung für jede Zeile Ihrer Tabelle erfordert. Indizes sind nutzlos und bei großen Datensätzen wird es lange dauern. – ceejayoz

+0

@ceejayoz: Sie haben es rückwärts - Indizes auf sind die Spalte, nicht der String-Wert wird konvertiert. Noch ist dies eine RBAR (Zeile für quälende Zeile) Umwandlung des String-Wertes in ein Datum ... –

+0

Wenn die Daten des Benutzers als Strings wie "1/31/2015" gespeichert werden, wird die Indexierung sie nicht viel nutzen um nach Datum zu filtern, und Sie müssen jeden 't.date' Wert durch' STR_TO_DATE' ausführen, um ihn in ein natives Format zu bringen. – ceejayoz

2

MySQL DATE und DATETIME Felder sind im Format YYYY-MM-DD HH:MM:SS. Wenn Sie keinen integrierten Datentyp verwenden, der Datumsangaben verarbeitet, werden Sie viel mehr Probleme haben.

+0

Darüber hinaus möchte ich nur erwähnen, dass es eine STR_TO_DATE -Funktion gibt, um eine Zeichenfolge in ein gültiges SQL-Datum zu konvertieren. –

2

Erstens, & & ist nicht der "und" -Operator in SQL; Verwenden Sie UND.

Zweitens sind MySQL-Daten immer ISO-8601. Ich schlage vor, Sie lesen den Standard oder sehen sich einige Beispiele an.

Drittens können Sie die SQL-Funktion zwischen einem Wert in einem Bereich zu finden.

Ich empfehle

a) Die MySQL-Dokumentation

b) Einige Beispiele

Und

c) an einem Trainingskurs Go Lesen, SQL für Anfänger.

+0

Danke für die Antwort, aber ich denke, Sie sind falsch auf den ersten Punkt: http://dev.mysql.com/doc/refman/5.0/en/logical-operators.html#operator_and und ich wünschte, ich könnte eine gebaut verwenden im Datentyp, wodurch BETWEEN und alle anderen Datumsfunktionen möglich wären. Ich benutze einen Longtext-Typ, um diese Daten zu speichern, daher die ziemlich einfache Frage, die ich jetzt glaube, dass es viel mehr Sinn macht - mein Schlechter. – InnateDev

Verwandte Themen