MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie SYSDATE() in MariaDB funktioniert

In MariaDB SYSDATE() ist eine integrierte Datums- und Uhrzeitfunktion, die das aktuelle Datum und die aktuelle Uhrzeit zurückgibt.

Es gibt die Zeit zurück, zu der die Funktion ausgeführt wurde (die sich von der Zeit unterscheiden kann, zu der die Anweisung ausgeführt wurde).

Der Rückgabewert wird in 'YYYY-MM-DD HH:MM:SS' zurückgegeben oder YYYYMMDDHHMMSS.uuuuuu Format, abhängig davon, ob die Funktion in einem String- oder numerischen Kontext verwendet wird.

Der Rückgabewert wird in der aktuellen Zeitzone ausgedrückt.

Sie haben auch die Möglichkeit, die Mikrosekundengenauigkeit anzugeben.

Syntax

Die Syntax lautet wie folgt:

SYSDATE([precision])

Wobei precision ist ein optionales Argument, das die Mikrosekundengenauigkeit angibt.

Beispiel

Hier ist ein Beispiel:

SELECT SYSDATE();

Ergebnis:

+---------------------+
| SYSDATE()           |
+---------------------+
| 2021-05-27 08:40:41 |
+---------------------+

Numerischer Kontext

Wenn SYSDATE() in einem numerischen Kontext verwendet wird, steht das Ergebnis in YYYYMMDDHHMMSS.uuuuuu formatieren.

Beispiel:

SELECT
    SYSDATE(),
    SYSDATE() + 0;

Ergebnis:

+---------------------+----------------+
| SYSDATE()           | SYSDATE() + 0  |
+---------------------+----------------+
| 2021-05-27 08:41:19 | 20210527084119 |
+---------------------+----------------+

Präzision

Hier ist ein Beispiel für die Angabe der Genauigkeit im Mikrosekundenbereich:

SELECT
    SYSDATE(6),
    SYSDATE(6) + 0;

Ergebnis:

+----------------------------+-----------------------+
| SYSDATE(6)                 | SYSDATE(6) + 0        |
+----------------------------+-----------------------+
| 2021-05-27 08:41:44.561665 | 20210527084144.562263 |
+----------------------------+-----------------------+

Der Höchstwert für die Mikrosekunden-Präzision ist 6. Folgendes passiert, wenn eine höhere Zahl für die Präzision übergeben wird:

SELECT SYSDATE(12);

Ergebnis:

ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6

SYSDATE() vs NOW()

Obwohl SYSDATE() ähnelt dem NOW() Funktion gibt es Unterschiede.

Einer der Hauptunterschiede besteht darin, dass SYSDATE() gibt die Zeit zurück, zu der es ausgeführt wird, wohingegen NOW() gibt die Zeit zurück, zu der die Ausführung der Anweisung begonnen hat. Bei Ausführung innerhalb einer gespeicherten Prozedur oder eines Triggers NOW() gibt die Zeit zurück, zu der die gespeicherte Prozedur oder der Trigger mit der Ausführung begonnen hat.

Hier ist ein Beispiel, das diesen Unterschied demonstriert:

SELECT 
    NOW(),
    SYSDATE(),
    SLEEP(5),
    NOW(),
    SYSDATE();

Ergebnis (bei vertikaler Ausgabe):

    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:06
 SLEEP(5): 0
    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:11

In diesem Fall haben wir den SLEEP() verwendet Funktion, die Verarbeitung fünf Sekunden lang anzuhalten, bevor die zweite Menge von Funktionsaufrufen ausgeführt wird.

Das sehen wir beim zweiten Mal SYSDATE() aufgerufen wurde, war der Rückgabewert anders als beim ersten Mal. NOW() andererseits beide Male denselben Wert zurückgegeben.

Bei der Verwendung von SYSDATE() sind noch einige andere Dinge zu beachten . Zum Beispiel SET TIMESTAMP beeinflusst es nicht (obwohl es es tut NOW() beeinflussen Funktion). Auch SYSDATE() ist für die Replikation unsicher, wenn die anweisungsbasierte binäre Protokollierung verwendet wird. Es gibt jedoch Möglichkeiten, damit umzugehen, falls erforderlich. Weitere Informationen finden Sie in der MariaDB-Dokumentation.