In MariaDB, SYSDATE()
is een ingebouwde datum- en tijdfunctie die de huidige datum en tijd retourneert.
Het geeft de tijd terug waarop de functie werd uitgevoerd (die kan verschillen van de tijd dat de instructie werd uitgevoerd).
De geretourneerde waarde wordt geretourneerd in 'YYYY-MM-DD HH:MM:SS'
of YYYYMMDDHHMMSS.uuuuuu
formaat, afhankelijk van of de functie in een tekenreeks of in een numerieke context wordt gebruikt.
De retourwaarde wordt uitgedrukt in de huidige tijdzone.
Je hebt ook de mogelijkheid om de precisie van microseconden op te geven.
Syntaxis
De syntaxis gaat als volgt:
SYSDATE([precision])
Waar precision
is een optioneel argument dat de precisie van microseconden specificeert.
Voorbeeld
Hier is een voorbeeld:
SELECT SYSDATE();
Resultaat:
+---------------------+ | SYSDATE() | +---------------------+ | 2021-05-27 08:40:41 | +---------------------+
Numerieke context
Wanneer SYSDATE()
wordt gebruikt in een numerieke context, het resultaat is in YYYYMMDDHHMMSS.uuuuuu
formaat.
Voorbeeld:
SELECT
SYSDATE(),
SYSDATE() + 0;
Resultaat:
+---------------------+----------------+ | SYSDATE() | SYSDATE() + 0 | +---------------------+----------------+ | 2021-05-27 08:41:19 | 20210527084119 | +---------------------+----------------+
Precisie
Hier is een voorbeeld van het specificeren van microseconde precisie:
SELECT
SYSDATE(6),
SYSDATE(6) + 0;
Resultaat:
+----------------------------+-----------------------+ | SYSDATE(6) | SYSDATE(6) + 0 | +----------------------------+-----------------------+ | 2021-05-27 08:41:44.561665 | 20210527084144.562263 | +----------------------------+-----------------------+
De maximale waarde voor de precisie van microseconden is 6. Dit is wat er gebeurt als een hoger getal wordt doorgegeven voor de precisie:
SELECT SYSDATE(12);
Resultaat:
ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6
SYSDATE()
vs NOW()
Hoewel SYSDATE()
is vergelijkbaar met de NOW()
functie zijn er verschillen.
Een van de belangrijkste verschillen is dat SYSDATE()
geeft de tijd terug dat het wordt uitgevoerd, terwijl NOW()
geeft de tijd terug waarop de instructie werd uitgevoerd. Wanneer uitgevoerd binnen een opgeslagen procedure of trigger, NOW()
geeft de tijd terug waarop de opgeslagen procedure of trigger is gestart.
Hier is een voorbeeld dat dit verschil laat zien:
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Resultaat (met verticale uitvoer):
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 dit geval gebruikten we de SLEEP()
functie om de verwerking vijf seconden te pauzeren vóór de tweede reeks functieaanroepen.
We kunnen zien dat de tweede keer SYSDATE()
werd aangeroepen, was de geretourneerde waarde anders dan de eerste keer. NOW()
aan de andere kant, gaf beide keren dezelfde waarde terug.
Er zijn een paar andere dingen waar u op moet letten bij het gebruik van SYSDATE()
. Bijvoorbeeld SET TIMESTAMP
heeft er geen invloed op (terwijl het wel invloed op de NOW()
functie). Ook SYSDATE()
is onveilig voor replicatie als binaire logboekregistratie op basis van instructies wordt gebruikt. Er zijn echter manieren om hiermee om te gaan, indien nodig. Zie de MariaDB-documentatie voor meer informatie.