In SQL, esistono funzioni che permettono di recuperare la data e l’ora correnti durante le operazioni di database. In particolare, MySQL utilizza comunemente due funzioni: CURDATE() e NOW(). Utilizzando queste funzioni, è possibile ottenere facilmente la data e l’ora correnti, utili per registrare e gestire i dati. Questo articolo spiegherà come utilizzare queste funzioni e le differenze tra di esse in dettaglio.
Come utilizzare la funzione CURDATE()
La funzione CURDATE() è una funzione integrata di MySQL per ottenere la data corrente. Questa funzione restituisce solo l’informazione di anno, mese e giorno, escludendo l’ora. Di seguito è riportato un esempio di utilizzo di base della funzione CURDATE().
Esempio di utilizzo di base
Per ottenere la data corrente, eseguire la seguente query SQL:
SELECT CURDATE();
Quando si esegue questa query, viene restituita la data odierna nel formato YYYY-MM-DD
. Ad esempio, se si esegue questa query il 24 maggio 2024, il risultato sarà il seguente:
+------------+
| CURDATE() |
+------------+
| 2024-05-24 |
+------------+
Esempio avanzato: Inserire la data corrente in una tabella
È anche possibile utilizzare la funzione CURDATE() per inserire la data corrente in una tabella. Nell’esempio seguente, viene inserito un nuovo ordine nella tabella orders
con la data dell’ordine impostata alla data corrente.
INSERT INTO orders (order_date, customer_id, product_id, quantity)
VALUES (CURDATE(), 12345, 67890, 1);
Quando si esegue questa query, viene aggiunta una nuova riga alla tabella orders
e il campo order_date
viene popolato con la data corrente.
Come utilizzare la funzione NOW()
La funzione NOW() è una funzione integrata di MySQL per ottenere la data e l’ora correnti. Questa funzione restituisce un timestamp che include le informazioni su anno, mese, giorno, ora, minuto e secondo. Di seguito è riportato un esempio di utilizzo di base della funzione NOW().
Esempio di utilizzo di base
Per ottenere la data e l’ora correnti, eseguire la seguente query SQL:
SELECT NOW();
Quando si esegue questa query, viene restituito il timestamp corrente nel formato YYYY-MM-DD HH:MM:SS
. Ad esempio, se si esegue questa query alle 14:30:45 del 24 maggio 2024, il risultato sarà il seguente:
+---------------------+
| NOW() |
+---------------------+
| 2024-05-24 14:30:45 |
+---------------------+
Esempio avanzato: Inserire il timestamp corrente in una tabella
È anche possibile utilizzare la funzione NOW() per inserire il timestamp corrente in una tabella. Nell’esempio seguente, viene inserito un nuovo tentativo di accesso nella tabella login_attempts
con l’ora del tentativo impostata alla data e ora correnti.
INSERT INTO login_attempts (user_id, attempt_time, status)
VALUES (12345, NOW(), 'SUCCESS');
Quando si esegue questa query, viene aggiunta una nuova riga alla tabella login_attempts
e il campo attempt_time
viene popolato con il timestamp corrente.
Differenze tra CURDATE() e NOW()
Entrambe le funzioni CURDATE() e NOW() vengono utilizzate per recuperare le informazioni sulla data e l’ora correnti, ma ci sono chiare differenze nelle informazioni che restituiscono. Comprendere queste differenze aiuterà a scegliere la funzione appropriata da utilizzare.
Caratteristiche di CURDATE()
CURDATE() è una funzione che recupera solo la data corrente. Questa funzione non include informazioni sull’ora e restituisce la data nel formato YYYY-MM-DD
. È adatta per attività come la generazione di report basati sulla data di sistema o il filtraggio dei dati in base alle date.
Esempio di utilizzo
SELECT CURDATE();
Risultato:
+------------+
| CURDATE() |
+------------+
| 2024-05-24 |
+------------+
Caratteristiche di NOW()
NOW() è una funzione che recupera la data e l’ora correnti. Questa funzione restituisce un timestamp che include sia la data che l’ora nel formato YYYY-MM-DD HH:MM:SS
. È adatta per attività come la creazione di voci di log o la gestione di dati che richiedono informazioni sul timestamp.
Esempio di utilizzo
SELECT NOW();
Risultato:
+---------------------+
| NOW() |
+---------------------+
| 2024-05-24 14:30:45 |
+---------------------+
Scegliere la funzione giusta per diversi scenari
- Esempio di utilizzo di CURDATE(): Quando si gestiscono solo le date. Ad esempio, query che estraggono eventi che si sono verificati in una data specifica o aggregano dati in base alle date.
- Esempio di utilizzo di NOW(): Quando si gestiscono sia la data che l’ora. Ad esempio, registrazione dei log, inserimento di dati che richiedono un timestamp o gestione degli aggiornamenti in base all’ora.
Utilizzando CURDATE() e NOW() in modo appropriato, è possibile recuperare accuratamente le informazioni richieste.
Esempi di query SQL
Di seguito sono riportati alcuni esempi pratici di query SQL utilizzando le funzioni CURDATE() e NOW(). Questi esempi mostrano come ogni funzione restituisce i risultati e ne dimostrano l’uso effettivo.
Query per ottenere la data corrente
La seguente query utilizza la funzione CURDATE() per ottenere la data corrente:
SELECT CURDATE();
Quando si esegue questa query, viene restituita la data odierna nel formato YYYY-MM-DD
. Ad esempio, il risultato sarà il seguente:
+------------+
| CURDATE() |
+------------+
| 2024-05-24 |
+------------+
Query per ottenere la data e l’ora correnti
La seguente query utilizza la funzione NOW() per ottenere la data e l’ora correnti:
SELECT NOW();
Quando si esegue questa query, viene restituito il timestamp corrente nel formato YYYY-MM-DD HH:MM:SS
. Ad esempio, il risultato sarà il seguente:
+---------------------+
| NOW() |
+---------------------+
| 2024-05-24 14:30:45 |
+---------------------+
Query per inserire la data corrente in una tabella
La seguente query utilizza la funzione CURDATE() per inserire la data corrente in una tabella:
INSERT INTO daily_reports (report_date, report_content)
VALUES (CURDATE(), 'Contenuto del rapporto di vendita giornaliero');
Quando si esegue questa query, viene aggiunta una nuova riga alla tabella daily_reports
e il campo report_date
viene popolato con la data corrente.
Query per inserire il timestamp corrente in una tabella
La seguente query utilizza la funzione NOW() per inserire il timestamp corrente in una tabella:
INSERT INTO event_logs (event_time, event_description)
VALUES (NOW(), 'Evento di accesso utente');
Quando si esegue questa query, viene aggiunta una nuova riga alla tabella event_logs
e il campo event_time
viene popolato con il timestamp corrente.
Attraverso questi esempi, è possibile comprendere come utilizzare le funzioni CURDATE() e NOW() e quali risultati restituiscono. Questo consente l’esecuzione efficiente di varie operazioni di database che richiedono date e orari.
Esempi avanzati
Di seguito sono riportate alcune query pratiche che utilizzano le funzioni CURDATE() e NOW() per sfruttare la data e l’ora correnti. Queste query sono utili per la manipolazione avanzata dei dati e l’analisi basata su date e orari.
Query per ottenere dati degli ultimi 7 giorni
Per ottenere i dati degli ultimi 7 giorni, utilizzare la funzione CURDATE() per calcolare la data in base alla data corrente.
SELECT * FROM orders
WHERE order_date >= CURDATE() - INTERVAL 7 DAY;
Questa query estrae tutti gli ordini dalla tabella orders
che si sono verificati negli ultimi 7 giorni.
Query per ottenere i record di una data specifica
Per ottenere i record di una data specifica, utilizzare la funzione CURDATE() per specificare la condizione.
SELECT * FROM events
WHERE event_date = CURDATE();
Questa query estrae tutti gli eventi dalla tabella events
che si sono verificati oggi.
Query per ottenere i tentativi di accesso nell’ultima ora
Per ottenere i tentativi di accesso avvenuti nell’ultima ora, utilizzare la funzione NOW() per calcolare l’ora in base all’ora corrente.
SELECT * FROM login_attempts
WHERE attempt_time >= NOW() - INTERVAL 1 HOUR;
Questa query estrae tutti i tentativi di accesso dalla tabella login_attempts
che si sono verificati nell’ultima ora.
Query per utilizzare il timestamp corrente per aggiornamenti automatici dei dati
Per utilizzare il timestamp corrente per aggiornare i record, utilizzare la funzione NOW().
UPDATE users
SET last_login = NOW()
WHERE user_id = 12345;
Questa query aggiorna il campo last_login
di un utente specifico nella tabella users
con il timestamp corrente.
Query per aggregare le vendite dall’inizio del mese a oggi
Per aggregare le vendite dall’inizio del mese a oggi, utilizzare la funzione CURDATE() per calcolare la data del primo giorno del mese.
SELECT SUM(sales_amount) FROM sales
WHERE sale_date >= DATE_FORMAT(CURDATE() ,'%Y-%m-01') AND sale_date <= CURDATE();
Questa query aggrega le vendite totali dalla tabella sales
dal primo giorno del mese a oggi.
Comprendendo questi esempi avanzati di query che utilizzano le funzioni CURDATE() e NOW(), è possibile eseguire in modo efficiente varie manipolazioni e analisi dei dati basate su date e orari.
Conclusione
Le funzioni CURDATE() e NOW() sono strumenti potenti in MySQL per ottenere la data e l’ora correnti. CURDATE() restituisce solo la data, rendendola adatta per operazioni basate sulle date. D’altra parte, NOW() restituisce un timestamp ed è utile quando sono richieste informazioni sull’ora. Utilizzando appropriatamente queste funzioni, è possibile registrare, gestire e analizzare i dati in modo efficiente. Fare riferimento agli esempi di utilizzo di base e avanzati forniti in questo articolo per creare query SQL avanzate che utilizzano date e orari.