Angenommen, ich habe zwei Tabellen wie folgt:
%Vor% Ist es beispielsweise sicher, alle Ereignisse und ihre Position aufzulisten, wenn ich das Feld Time
als mein Beitrittskriterium verwende? I.e .:
ODER, einfach nur einen Datetime-Wert vergleichen (unter Berücksichtigung, dass der parametrierte Wert den Sekundenbruchteil enthalten kann - den MySQL immer akzeptiert hat), z. B.
%Vor%Ich verstehe, dass MySQL (vor Version 5.6.4) nur Datumsfelder OHNE Millisekunden speichert. Ich würde also annehmen, dass diese Abfrage in Ordnung wäre. Ab Version 5.6.4 habe ich gelesen, dass MySQL nun Millisekunden mit dem Datum / Uhrzeit-Feld speichern kann.
Unter der Annahme, dass datetime-Werte mit Funktionen wie NOW()
eingefügt werden, werden die Millisekunden abgeschnitten (& lt; 5.6.4), was ich annehmen würde, damit die obige Abfrage funktioniert. Mit Version 5.6.4 und höher könnte dies jedoch möglicherweise NICHT funktionieren. Ich bin und werde mich nur für die zweite Genauigkeit interessieren.
Wenn jemand die folgenden Fragen beantworten könnte, wäre ich sehr dankbar:
BEARBEITEN
Ich weiß, dass ich die Datumzeiten umwandeln kann, danke für diejenigen, die geantwortet haben, aber ich versuche hier die Wurzel des Problems anzugehen (die Tatsache, dass der Speichertyp / die Definition geändert wurde) und ich NICHT verwenden möchte Funktionen in meinen Abfragen. Dies negiert meine ganze Arbeit der Optimierung von Abfragen, die Indizes usw. anwenden, ganz zu schweigen davon, dass ich alle meine Abfragen neu schreiben muss.
EDIT2
Kann irgendjemand da draußen einen Grund vorschlagen, nicht auf ein DATETIME
-Feld mit zweiter Genauigkeit zu kommen?
Es scheint, dass die MySQL-Entwickler die Abwärtskompatibilität nicht aufheben wollten. Um Millisekunden zu verwenden, müssen Sie daher explizit Ihre Tabellen, SQL usw. ändern, um diese Funktion zu nutzen:
JETZT ([fsp])
Ab MySQL 5.6.4 wird das Argument fsp angegeben, um a anzugeben Sekundenbruchteile von 0 bis 6, enthält der Rückgabewert a Sekundenbruchteil dieser vielen Ziffern. Vor 5.6.4, beliebig Argument wird ignoriert.
%Vor%MySQL 5.6.4 und höher erweitert die Unterstützung von Sekundenbruchteilen für TIME, DATETIME- und TIMESTAMP-Werte mit bis zu Mikrosekunden (6 Ziffern) Präzision:
Um eine Spalte zu definieren, die einen Sekundenbruchteil enthält, verwenden Sie die Taste Syntax type_name (fsp), wobei type_name für TIME, DATETIME oder TIMESTAMP und fsp ist die Sekundenbruchteile-Genauigkeit. Zum Beispiel:
Versuchen Sie diese Abfrage. Für Frage 3 und 4 wird das gut funktionieren. Dennoch ist es nicht empfehlenswert, das Zeitfeld für Joins zu verwenden.
%Vor%Obwohl ich Ihnen eine Lösung gegeben habe, werden Sie jedoch darauf beschränkt sein, dieselbe Zeit in verschiedene Tabellen einzufügen. Dann können Sie vergleichen, aber es ist ziemlich schwierig, weil Sie gleichzeitig zwei Insert-Abfragen ausführen können. Sie müssen also einige Menüarbeit dafür tun. Wenn Sie mehr lesen möchten, lesen Sie diesen Artikel.
Tags und Links datetime mysql time-precision