sql >> Database teknologi >  >> RDS >> MariaDB

Hvordan SYSDATE() virker i MariaDB

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.


  1. Sådan opretter du PL/SQL-funktion i Oracle-databasen

  2. Escape SQL LIKE værdi for Postgres med psycopg2

  3. MariaDB DEFAULT() Forklaret

  4. En tilgang til indeksjustering – del 1