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

Come funziona SYSDATE() in MariaDB

In MariaDB, SYSDATE() è una funzione di data e ora incorporata che restituisce la data e l'ora correnti.

Restituisce l'ora in cui è stata eseguita la funzione (che potrebbe essere diversa dall'ora in cui è stata eseguita l'istruzione).

Il valore restituito viene restituito in 'YYYY-MM-DD HH:MM:SS' o YYYYMMDDHHMMSS.uuuuuu formato, a seconda che la funzione sia utilizzata in un contesto stringa o numerico.

Il valore restituito è espresso nel fuso orario corrente.

Hai anche la possibilità di specificare la precisione del microsecondo.

Sintassi

La sintassi è questa:

SYSDATE([precision])

Dove precision è un argomento facoltativo che specifica la precisione del microsecondo.

Esempio

Ecco un esempio:

SELECT SYSDATE();

Risultato:

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

Contesto numerico

Quando SYSDATE() viene utilizzato in un contesto numerico, il risultato è in YYYYMMDDHHMMSS.uuuuuu formato.

Esempio:

SELECT
    SYSDATE(),
    SYSDATE() + 0;

Risultato:

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

Precisione

Ecco un esempio di specifica della precisione in microsecondi:

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

Risultato:

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

Il valore massimo per la precisione in microsecondi è 6. Ecco cosa succede quando viene passato un numero più alto per la precisione:

SELECT SYSDATE(12);

Risultato:

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

SYSDATE() rispetto a NOW()

Sebbene SYSDATE() è simile a NOW() funzione, ci sono differenze.

Una delle differenze principali è che SYSDATE() restituisce l'ora di esecuzione, mentre NOW() restituisce l'ora in cui l'istruzione ha iniziato l'esecuzione. Quando viene eseguito all'interno di una stored procedure o trigger, NOW() restituirà l'ora in cui la procedura memorizzata o il trigger ha iniziato l'esecuzione.

Ecco un esempio che dimostra questa differenza:

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

Risultato (usando l'output verticale):

    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 questo caso abbiamo usato il SLEEP() funzione per sospendere l'elaborazione per cinque secondi prima del secondo lotto di chiamate di funzione.

Possiamo vederlo la seconda volta SYSDATE() è stato richiamato, il suo valore restituito era diverso dalla prima volta. NOW() d'altra parte, ha restituito lo stesso valore entrambe le volte.

Ci sono alcune altre cose a cui prestare attenzione quando si utilizza SYSDATE() . Ad esempio, SET TIMESTAMP non lo pregiudica (mentre fa influisca su NOW() funzione). Inoltre, SYSDATE() non è sicuro per la replica se viene utilizzata la registrazione binaria basata su istruzioni. Tuttavia, ci sono modi per affrontarlo, se necessario. Consulta la documentazione di MariaDB per ulteriori informazioni.