MySQL Join / Vergleich in einer DATETIME-Spalte (5.6.4 und 5.6.4)

8

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 .:

%Vor%

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:

  1. Wie vergleicht MySQL im Allgemeinen Datetime-Felder miteinander? die obige Abfrage).
  2. Ist die obige Abfrage in Ordnung, und verwendet sie Indizes für die Uhrzeit? Felder? (MySQL & lt; 5.6.4)
  3. Gibt es eine Möglichkeit, Millisekunden auszuschließen? I.e. beim Einfügen und in bedingte Joins / Selects usw.? (MySQL & gt; 5.6.4)
  4. Funktioniert die obige Join-Abfrage? (MySQL & gt; 5.6.4)

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?

    
Simon 21.06.2012, 05:34
quelle

2 Antworten

4

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.

Ссылка

  

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:

%Vor%     
biziclop 21.06.2012, 07:33
quelle
1

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.

Ссылка

    
Muhammad Raheel 21.06.2012 06:22
quelle

Tags und Links