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.