Der Zeitvergleich kann in MySQL implementiert werden, mit Anweisungen wie [ SELECT testdate FROM t1 WHERE testdate >= '2018-09-12';SELECT testdate FROM t1 WHERE testdate >= 20180912;].
Kürzlich habe ich festgestellt, dass ich Datumsangaben falsch vergleiche. In der folgenden Anweisung ist das Feld a beispielsweise eine Spalte vom Typ DATETIME:
select a from t1 where DATEDIFF(a, '2018-09-11') < 0;
Mit dieser Anweisung sollen alle Datensätze vor dem Datum 2018-09-11 gefunden werden. Bei dieser Anweisung liegt jedoch ein Problem vor. Wenn ein Feld indiziert ist, führt die Verwendung dieses Typs für den Datumsvergleich zu einer Abfrage den Index nicht zu verwenden. Dies verringert die Abfrageleistung.
Empfohlener Kurs: MySQL-Tutorial.
Lesen Sie die MySQL-Dokumentation zum Datumsfeldvergleich. Beim Durchführen eines Datumsvergleichs wandelt MySQL das Datum zum Vergleich automatisch in eine Zahl um. Nach der Where-Bedingung gelten bei der Verwendung von Datumsangaben im Zeichenfolgenformat zum Vergleich mit Feldern vom Typ DATE, DATETIME, TIMESTAMP und TIME keine strengen Anforderungen an das Zeichenfolgenformat. Sie können ein beliebiges Formattrennzeichen zur Darstellung des Datums verwenden, z. B. „2018-09-“. 11“, „2018#09#11“, „2018&09&11“ sind alle die gleichen Daten für MySQL. Wenn kein Trennzeichen vorhanden ist, z. B. „20180911“, ist es dasselbe wie „2018-09-11“ oder andere Daten mit Trennzeichen. Zum Beispiel das Bild unten
select a from t1 where a < '2018#09#11'; 与 select a from t1 where a < '2018-09-11'; 与 select a from t1 where a < '20180911'; 所代表的意义是相同的,都是查询日期小于2018年9月11日的数据 也就是说上图的查询语句,完全可以重写为,这么做的好处?就是会使用索引,是查询更快 select a from t1 where a < '2018-09-11';
Wenn Sie ein Datumsfeld vom Typ „Datum“ mit einem Datum vom Typ „String“ nach <, >, >=, <=, between vergleichen, konvertiert MySQL das Datum vom Typ „String“ in ein Ganzzahlige Typnummern werden verglichen, um Abfragen zu beschleunigen.
Mit Ausnahme der folgenden drei Situationen:
1, Vergleich von zwei Tabellenfeldern
2, Vergleich von Datumstypfeldern und Ausdrücken
3 , verwenden Sie Ausdrücke, um Felder vom Typ Datum zu vergleichen.
Grund: In den oben genannten drei Situationen konvertiert MySQL das Datum zum Vergleich in eine Zeichenfolge.
Die folgenden Beispiele können alle normal ausgeführt werden:
INSERT INTO t1 (testdate) VALUES (20180912); INSERT INTO t1 (testdate) VALUES ('20180912'); INSERT INTO t1 (testdate) VALUES ('18-09-12'); INSERT INTO t1 (testdate) VALUES ('2018.09.12'); INSERT INTO t1 (testdate) VALUES ('2018 09 12'); INSERT INTO t1 (testdate) VALUES ('0000-00-00'); SELECT testdate FROM t1 WHERE testdate >= '2018-09-12'; SELECT testdate FROM t1 WHERE testdate >= 20180912; SELECT MOD(testdate,100) FROM t1 WHERE testdate >= 20180912; SELECT testdate FROM t1 WHERE testdate >= '20180912';
Mysql ermöglicht das Speichern von „0000-00-00“ als „0“-Wert vom Typ DATE, auch virtuelles Datum genannt. In manchen Szenarien ist es praktischer als das Speichern von NULL-Werten. Wenn ein ungültiger Datumswert in einem Feld vom Typ DATE gespeichert wird, speichert MySQL ihn standardmäßig als „0000-00-00“. Wenn das Speichern von „0“-Werten nicht zulässig ist, aktivieren Sie den Parameter NO_ZERO_DATE.
Sie können auch die Funktion unix_timestamp verwenden, um die Zeichenzeit in einen Unix-Zeitstempel umzuwandeln.
select meeting_id,meeting_name,start_time,end_time from meeting_data where meeting_id REGEXP '[0-9]{4}0001' and unix_timestamp(start_time) < unix_timestamp(NOW()) and unix_timestamp(end_time) > unix_timestamp(NOW());
Das obige ist der detaillierte Inhalt vonKann MySQL die Zeit vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!