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.