Suche…


Jetzt()

Select Now();

Zeigt das aktuelle Datum und die Uhrzeit des Servers an.

Update `footable` set mydatefield = Now();

Dadurch wird das Feld mydatefield mit dem aktuellen Datum und der Uhrzeit des Servers in der konfigurierten Zeitzone des Servers aktualisiert, z

'2016-07-21 12:00:00'

Datumsberechnung

NOW() + INTERVAL 1 DAY  -- This time tomorrow

CURDATE() - INTERVAL 4 DAY -- Midnight 4 mornings ago

Zeigt die gespeicherten MySQL-Fragen an, die vor 3 bis 10 Stunden (vor 180 bis 600 Minuten) gestellt wurden:

SELECT qId,askDate,minuteDiff  
FROM 
(   SELECT qId,askDate,
    TIMESTAMPDIFF(MINUTE,askDate,now()) as minuteDiff 
    FROM questions_mysql 
) xDerived 
WHERE minuteDiff BETWEEN 180 AND 600 
ORDER BY qId DESC 
LIMIT 50;

+----------+---------------------+------------+
| qId      | askDate             | minuteDiff |
+----------+---------------------+------------+
| 38546828 | 2016-07-23 22:06:50 |        182 |
| 38546733 | 2016-07-23 21:53:26 |        195 |
| 38546707 | 2016-07-23 21:48:46 |        200 |
| 38546687 | 2016-07-23 21:45:26 |        203 |
| ...      |                     |            |
+----------+---------------------+------------+

MySQL-Handbuchseiten für TIMESTAMPDIFF() .

Achtung Versuchen Sie nicht, Ausdrücke wie CURDATE() + 1 für die CURDATE() + 1 in MySQL zu verwenden. Sie geben nicht das zurück, was Sie erwarten, besonders wenn Sie an das Oracle-Datenbankprodukt gewöhnt sind. Verwenden CURDATE() + INTERVAL 1 DAY stattdessen CURDATE() + INTERVAL 1 DAY .

Testen gegen einen Datumsbereich

Obwohl es sehr verlockend ist, BETWEEN ... AND ... für einen Zeitraum zu verwenden, ist es problematisch. Stattdessen vermeidet dieses Muster die meisten Probleme:

WHERE x >= '2016-02-25'
  AND x  < '2016-02-25' + INTERVAL 5 DAY

Vorteile:

  • BETWEEN ist dabei inklusive, einschließlich des Enddatums oder des zweiten Datums.
  • 23:59:59 ist unbeholfen und falsch, wenn Sie eine Auflösung im Mikrosekundenbereich von DATETIME .
  • Dieses Muster vermeidet den Umgang mit Schaltjahren und anderen Datenberechnungen.
  • Es funktioniert, ob x DATE , DATETIME oder TIMESTAMP .

SYSDATE (), JETZT (), CURDATE ()

  SELECT SYSDATE();

Diese Funktion gibt das aktuelle Datum und die aktuelle Uhrzeit als Wert im Format 'YYYY-MM-DD HH:MM:SS' oder YYYYMMDDHHMMSS , je nachdem, ob die Funktion in einem String oder einem numerischen Kontext verwendet wird. Es gibt Datum und Uhrzeit in der aktuellen Zeitzone zurück.

  SELECT NOW();

Diese Funktion ist ein Synonym für SYSDATE() .

  SELECT CURDATE();

Diese Funktion gibt das aktuelle Datum ohne Zeit als Wert im Format 'YYYY-MM-DD' oder YYYYMMDD , je nachdem, ob die Funktion in einem String oder in einem numerischen Kontext verwendet wird. Es gibt das Datum in der aktuellen Zeitzone zurück.

Datum aus angegebenem Datum oder DateTime-Ausdruck extrahieren

SELECT DATE('2003-12-31 01:02:03');

Die Ausgabe wird sein:

2003-12-31

Verwenden eines Index für eine Datums- und Uhrzeitsuche

Viele reale Datenbanktabellen haben viele Zeilen mit DATETIME TIMESTAMP Spaltenwerten, die viel Zeit umfassen, einschließlich Jahren oder sogar Jahrzehnten. Häufig ist es erforderlich, eine WHERE Klausel zu verwenden, um einen Teil dieser Zeitspanne abzurufen. Beispielsweise möchten wir Zeilen für das Datum 1. September 2016 aus einer Tabelle abrufen.

Ein ineffizienter Weg, dies zu tun, ist folgendes:

 WHERE DATE(x) = '2016-09-01'   /* slow! */

Es ist ineffizient, weil es eine Funktion - DATE() - auf die Werte einer Spalte anwendet. Das bedeutet, MySQL muss jeden Wert von x prüfen, und ein Index kann nicht verwendet werden.

Ein besserer Weg, um die Operation durchzuführen, ist dies

 WHERE x >= '2016-09-01'
   AND x <  '2016-09-01' + INTERVAL 1 DAY

Dieser wählt einen Wertebereich von x einer beliebigen Stelle auf dem betreffenden Tag liegt, bis aber nicht einschließlich (daher < ) Mitternacht am nächsten Tag.

Wenn die Tabelle einen Index für die Spalte x , kann der Datenbankserver eine Bereichsüberprüfung für den Index durchführen. Das heißt, es kann den ersten relevanten Wert von x schnell finden und dann den Index nacheinander durchsuchen, bis der letzte relevante Wert gefunden wird. Ein Indexbereichsscan ist wesentlich effizienter als der für DATE(x) = '2016-09-01 erforderliche vollständige Tabellenscan.

Seien Sie nicht versucht, dies zu verwenden, auch wenn es effizienter aussieht.

  WHERE x BETWEEN '2016-09-01' AND '2016-09-01' + INTERVAL 1 DAY  /*  wrong! */

Es hat dieselbe Effizienz wie der Entfernungsscan, aber es werden Zeilen mit x Werten ausgewählt, die genau um Mitternacht am 2. September 2016 fallen. Dies ist nicht das, was Sie wollen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow