sql >> Database >  >> RDS >> MariaDB

Hoe SYSDATE() werkt in MariaDB

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.


  1. Een tabel maken op basis van een query met een andere tabelruimte (Oracle SQL)

  2. ORACLE Connect by clausule equivalent in SQL Server

  3. Een gegevensmodel voor een app voor het boeken van medische afspraken

  4. MyBatis Lijstwaarden invoegen