Frage

Zum Beispiel der folgende Abfrage funktioniert:

SELECT * 
  FROM quotes 
 WHERE expires_at <= '2010-10-15 10:00:00';

Dies ist aber die Durchführung offensichtlich eine ‚string‘ Vergleich - ich frage mich, ob es eine Funktion, um MySQL gebaut war, dass speziell bedeutet ‚Datetime‘ Vergleiche

.
War es hilfreich?

Lösung

... dies offensichtlich führt einen 'string' Vergleich

Nein - wenn das Datum / Uhrzeit-Format das unterstützte Format übereinstimmt, MySQL führt implizite Konvertierung den Wert in einen DATETIME- zu konvertieren, auf der Basis der Spalte es verglichen wird. Dasselbe geschieht mit:

WHERE int_column = '1'

... wo der String-Wert von "1" in eine ganze Zahl umgewandelt wird, weil int_column Datentyp INT, nicht CHAR / VARCHAR / TEXT.

Wenn Sie explizit den String in einem DATETIME- konvertieren, die STR_TO_DATE Funktion wäre die beste Wahl sein:

WHERE expires_at <= STR_TO_DATE('2010-10-15 10:00:00', '%Y-%m-%d %H:%i:%s')

Andere Tipps

Aber dies offensichtlich führt einen 'string' Vergleich

Nein. Der String wird automatisch in einen DATETIME- Wert gegossen werden.

Siehe 11.2. Typumwandlung bei der Auswertung von Ausdrücken.

Wenn ein Operator mit Operanden verschiedenen Typen verwendet wird, tritt Typumwandlung auf die Operanden kompatibel zu machen. Einige Umwandlungen auftreten implizit. Zum Beispiel wandelt MySQL automatisch Zahlen in Strings nach Bedarf, und vice versa.

Ich weiß, es ist ziemlich alt, aber ich treffe nur das Problem, und es ist das, was ich in dem SQL-doc sah:

[Für die besten Ergebnisse, wenn sie zwischen mit Datums- oder Zeitwert unter Verwendung] Verwendung CAST () explizit die Werte in dem gewünschten Datentyp zu umwandeln. Beispiele: Wenn Sie eine DATETIME- zwei DATE-Werte vergleichen, wandeln die DATE Werte DATETIME- Werte. Wenn Sie eine String-Konstante wie ‚2001.01.01‘ in einem Vergleich zu einem DATE verwenden, warf die Zeichenfolge in ein Datum.

Ich nehme an, es ist besser zu nutzen STR_TO_DATE, da sie die Zeit genommen haben, um eine Funktion zu machen nur dafür, und auch die Tatsache, dass ich dies in der BETWEEN doc ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top