1. Panoramica della funzione MySQL NOW()
La funzione MySQL NOW() viene utilizzata per recuperare facilmente la data e l’ora correnti all’interno del database. Sfruttando NOW() è possibile ottenere informazioni di timestamp utili per inserimenti di dati o per il logging. Nonostante la sua semplicità, è uno strumento potente ampiamente usato nella pratica.
Sintassi di base di NOW()
La sintassi della funzione NOW() è molto lineare. La query seguente recupera la data e l’ora correnti:
SELECT NOW();
Il risultato viene restituito nel formato YYYY-MM-DD HH:MM:SS. Ad esempio, se la data e l’ora sono il 24 ottobre 2024 alle 16:30, il risultato sarà:
2024-10-24 16:30:00
Inoltre, la funzione NOW() restituisce la data e l’ora correnti in base al fuso orario del database. Questo garantisce una gestione coerente del tempo in tutto il sistema.
Casi d’uso di NOW()
La funzione NOW() è particolarmente utile nei seguenti scenari:
- Logging : registra automaticamente l’ora delle modifiche o delle inserzioni di dati.
- Timestamp : traccia il momento delle azioni degli utenti.
- Filtraggio basato sul tempo : estrae i dati che si sono verificati entro un periodo specifico.

2. Esempi base di utilizzo di NOW()
Vediamo un esempio semplice di recupero della data e dell’ora correnti con la funzione NOW():
SELECT NOW();
Questa query restituisce la data e l’ora correnti. Oltre al formato stringa, è possibile ottenere il risultato anche in formato numerico. Utilizzando la query seguente, la data e l’ora vengono restituite in formato numerico (YYYYMMDDHHMMSS):
SELECT NOW() + 0;
Ad esempio, il risultato può essere restituito come 20241024163000, utile quando si gestiscono dati in formato numerico.
Specificare la precisione dei secondi frazionari
La funzione NOW() consente di specificare la precisione dei secondi frazionari. È possibile impostare la precisione come argomento:
SELECT NOW(3);
Questa query restituisce un risultato con tre cifre di precisione dei secondi frazionari, ad esempio 2024-10-24 16:30:00.123. Questa funzionalità è particolarmente utile nei sistemi che richiedono precisione sub-secondaria.
3. Differenza tra SYSDATE() e NOW()
Un’altra funzione simile a NOW() è SYSDATE(), ma si comportano in modo leggermente diverso:
- NOW() : recupera l’ora al momento dell’esecuzione della query e mantiene lo stesso valore per tutta l’istruzione. Anche se la transazione dura a lungo, restituisce lo stesso risultato.
- SYSDATE() : recupera l’ora corrente a ogni passaggio della query. Ciò significa che durante transazioni di lunga durata fornisce timestamp in tempo reale.
Ad esempio, nei processi batch di lunga durata, SYSDATE() fornisce risultati più accurati, mentre NOW() è preferito quando è richiesta la coerenza della transazione.
Esempio di differenze all’interno di una query
Ecco una query di esempio che mostra la differenza tra SYSDATE() e NOW():
SELECT NOW(), SYSDATE();
I risultati potrebbero apparire così:
NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
SYSDATE() riflette la differenza in tempo reale al momento dell’esecuzione, mentre NOW() conserva il timestamp dall’inizio della query. La scelta della funzione giusta dipende dal caso d’uso.

4. Casi d’uso pratici di NOW()
La funzione NOW() è molto utile in scenari specifici. Ad esempio, per registrare automaticamente l’ora di inserimento dei dati:
INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
Questo salva automaticamente l’ora corrente nella colonna created_at quando il record viene inserito. È particolarmente prezioso per il logging o il tracciamento di eventi.
Per estrarre i dati creati negli ultimi 7 giorni, è possibile utilizzare NOW() come segue:
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
Questa query recupera tutti i record creati negli ultimi 7 giorni rispetto all’ora corrente. NOW() è estremamente efficace per l’estrazione di dati dipendenti dal tempo.
5. Considerazioni quando si utilizza NOW()
Ci sono alcune considerazioni importanti quando si utilizza NOW(). In particolare, può influire sulla coerenza delle transazioni, quindi è necessario fare attenzione al contesto in cui viene usato.
- Comportamento all’interno delle transazioni : La funzione NOW() restituisce risultati coerenti all’interno di una transazione, garantendo lo stesso orario anche nei processi a lunga durata. Questo è fondamentale per mantenere l’integrità dei dati. Tuttavia, se servono timestamp in tempo reale, SYSDATE() è più appropriato.
Nota inoltre che la funzione NOW() dipende dal fuso orario del sistema, il che significa che i risultati possono variare a seconda delle impostazioni. Per le applicazioni globali, questo fattore deve essere considerato attentamente durante la progettazione.


