1. Panoramica della funzione MySQL NOW()
La funzione MySQL NOW() è usata per recuperare facilmente la data e l’ora correnti all’interno di un database. Utilizzando la funzione NOW() è possibile ottenere timestamp durante l’inserimento dei dati o recuperare informazioni temporali utili per scopi di logging. Sebbene semplice, è uno strumento molto potente e ampiamente utilizzato.
Sintassi di base della funzione NOW()
La sintassi della funzione NOW() è molto semplice. È possibile recuperare la data e l’ora correnti con la seguente query.
SELECT NOW();
Il risultato dell’esecuzione viene restituito nel formato YYYY-MM-DD HH:MM:SS. Ad esempio, se la data e l’ora sono 24 ottobre 2024 alle 16:30, il risultato sarà il seguente.
2024-10-24 16:30:00
La funzione NOW() restituisce la data e l’ora correnti in base al fuso orario del database. Questo consente una gestione coerente del tempo in tutto il sistema.
Casi d’uso comuni per la funzione NOW()
La funzione NOW() è particolarmente utile nelle seguenti situazioni.
- Logging : Registra automaticamente l’ora in cui i dati vengono modificati o inseriti.
- Timestamp : Utilizzato per registrare il momento delle azioni degli utenti.
- Filtraggio dipendente dal tempo : Estrazione dei dati avvenuti entro un periodo specifico.
2. Esempi di utilizzo base della funzione NOW()
Vediamo alcuni esempi base di recupero della data e dell’ora correnti usando la funzione NOW().
SELECT NOW();
Questa query restituisce la data e l’ora correnti. Oltre a recuperarle come stringa, è possibile ottenerle anche in formato numerico. Utilizzando la query seguente, la data e l’ora correnti vengono restituite in formato numerico (YYYYMMDDHHMMSS).
SELECT NOW() + 0;
Ad esempio, il risultato può essere restituito come “20241024163000”, il che è comodo quando si gestisce il valore in forma numerica.
Specificare la precisione dei secondi frazionari
La funzione NOW() consente di specificare la precisione dei secondi frazionari. È possibile impostare la precisione passando un argomento come mostrato di seguito.
SELECT NOW(3);
Questa query restituisce un risultato con precisione al millisecondo (tre cifre dopo il punto decimale). Ad esempio, può restituire un valore come “2024-10-24 16:30:00.123”. Questa funzionalità è estremamente utile nei sistemi che richiedono precisione a livello di secondi.
3. Differenza tra SYSDATE() e NOW()
C’è una funzione simile a NOW() chiamata SYSDATE(), ma si comportano in modo leggermente diverso.
- NOW() : Recupera l’ora all’inizio dell’esecuzione della query e mantiene lo stesso valore per tutta l’istruzione. Anche se una transazione dura a lungo, restituisce lo stesso risultato.
- SYSDATE() : Recupera l’ora corrente ad ogni passo della query. In altre parole, anche durante transazioni di lunga durata, restituisce l’ora reale corrente.
Ad esempio, nei processi batch di lunga durata, SYSDATE() può fornire risultati in tempo reale più accurati. Tuttavia, quando la coerenza della transazione è importante, si consiglia generalmente di utilizzare NOW().
Esempio che mostra la differenza all’interno di una query
La query seguente dimostra la differenza di comportamento tra SYSDATE() e NOW().
SELECT NOW(), SYSDATE();
Il risultato può apparire così.
NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
La differenza di tempo al momento dell’esecuzione della query è riflessa in SYSDATE(), mentre NOW() mantiene l’ora di inizio dell’esecuzione della query. Sebbene la differenza sia sottile, è importante scegliere la funzione appropriata a seconda del caso d’uso.

4. Applicazioni pratiche della funzione NOW()
La funzione NOW() è molto utile in scenari specifici. Ad esempio, se si desidera registrare automaticamente data e ora al momento dell’inserimento dei dati, è possibile utilizzare la funzione NOW() come mostrato di seguito.
INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
Questo registra automaticamente l’ora corrente nella colonna created_at quando il record viene inserito. Questa funzionalità è particolarmente utile per la registrazione dei log e il tracciamento degli eventi.
Inoltre, se desideri recuperare i dati creati negli ultimi sette giorni, puoi utilizzare la funzione NOW() come segue.
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
Questa query recupera tutti i record creati negli ultimi sette giorni dalla data e ora corrente. La funzione NOW() è estremamente efficace per l’estrazione di dati dipendenti dal tempo.
5. Considerazioni importanti quando si utilizza la funzione NOW()
Ci sono diversi punti importanti da considerare quando si utilizza la funzione NOW(). In particolare, può influire sulla coerenza delle transazioni, quindi è importante usarla in modo appropriato a seconda del contesto.
- Comportamento all’interno delle transazioni : La funzione NOW() restituisce un risultato coerente all’interno di una transazione, il che significa che restituisce lo stesso timestamp anche durante processi a lunga durata. Questo è importante per mantenere la coerenza dei dati. Tuttavia, se sono richiesti timestamp in tempo reale, è più appropriato utilizzare SYSDATE().
Inoltre, poiché la funzione NOW() dipende dall’impostazione del fuso orario, può restituire risultati diversi a seconda della configurazione del sistema. Nelle applicazioni globali, è essenziale progettare tenendo conto dei fusi orari.


