I MariaDB, SYSDATE()
er en indbygget dato- og klokkeslætsfunktion, der returnerer den aktuelle dato og klokkeslæt.
Det returnerer det tidspunkt, hvor funktionen blev udført (som kan være anderledes end det tidspunkt, hvor sætningen blev udført).
Returværdien returneres i 'YYYY-MM-DD HH:MM:SS'
eller YYYYMMDDHHMMSS.uuuuuu
format, afhængigt af om funktionen bruges i en streng eller numerisk kontekst.
Returværdien er udtrykt i den aktuelle tidszone.
Du har også mulighed for at angive mikrosekunds præcision.
Syntaks
Syntaksen ser sådan ud:
SYSDATE([precision])
Hvor precision
er et valgfrit argument, der specificerer mikrosekunders præcision.
Eksempel
Her er et eksempel:
SELECT SYSDATE();
Resultat:
+---------------------+ | SYSDATE() | +---------------------+ | 2021-05-27 08:40:41 | +---------------------+
Numerisk kontekst
Når SYSDATE()
bruges i en numerisk kontekst, er resultatet i YYYYMMDDHHMMSS.uuuuuu
format.
Eksempel:
SELECT
SYSDATE(),
SYSDATE() + 0;
Resultat:
+---------------------+----------------+ | SYSDATE() | SYSDATE() + 0 | +---------------------+----------------+ | 2021-05-27 08:41:19 | 20210527084119 | +---------------------+----------------+
Nøjagtighed
Her er et eksempel på specificering af mikrosekunders præcision:
SELECT
SYSDATE(6),
SYSDATE(6) + 0;
Resultat:
+----------------------------+-----------------------+ | SYSDATE(6) | SYSDATE(6) + 0 | +----------------------------+-----------------------+ | 2021-05-27 08:41:44.561665 | 20210527084144.562263 | +----------------------------+-----------------------+
Den maksimale værdi for mikrosekunders præcision er 6. Her er, hvad der sker, når et højere tal passeres for præcisionen:
SELECT SYSDATE(12);
Resultat:
ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6
SYSDATE()
vs NOW()
Selvom SYSDATE()
ligner NOW()
funktion, er der forskelle.
En af de vigtigste forskelle er, at SYSDATE()
returnerer den tid, den udfører, mens NOW()
returnerer det tidspunkt, hvor sætningen begyndte at udføre. Når den køres inden for en lagret procedure eller trigger, NOW()
returnerer det tidspunkt, hvor den lagrede procedure eller trigger begyndte at udføre.
Her er et eksempel, der viser denne forskel:
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Resultat (ved hjælp af lodret output):
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
I dette tilfælde brugte vi SLEEP()
funktion for at sætte behandlingen på pause i fem sekunder før den anden masse funktionskald.
Det kan vi se anden gang SYSDATE()
blev påberåbt, var dens returværdi anderledes end første gang. NOW()
på den anden side returnerede den samme værdi begge gange.
Der er et par andre ting, du skal være opmærksom på, når du bruger SYSDATE()
. For eksempel SET TIMESTAMP
påvirker det ikke (hvorimod det gør påvirke NOW()
fungere). Også SYSDATE()
er usikker til replikering, hvis der bruges sætningsbaseret binær logning. Der er dog måder at håndtere dette på, hvis det er nødvendigt. Se MariaDB-dokumentationen for mere information.