- 1 1. Introduzione
- 2 2. Come recuperare l’ora corrente in MySQL
- 3 3. Come formattare l’ora corrente in MySQL
- 4 4. Calcoli di Data/Ora Utilizzando l’Ora Corrente in MySQL
- 5 5. Impostazioni del Fuso Orario MySQL
- 6 6. Come Impostare l’Ora Corrente come Valore Predefinito in MySQL
- 7 7. Errori MySQL Comuni e Soluzioni (FAQ)
- 8 8. Buone Pratiche per Gestire l’Ora Corrente in MySQL
1. Introduzione
Quando è necessario gestire l’ora corrente in MySQL?
In MySQL, recuperare l’ora corrente è richiesto in molti scenari diversi. Per esempio, i seguenti casi d’uso sono comuni:
- Inserimento automatico di un timestamp durante la registrazione dei dati
- Ad esempio, registrare la data e l’ora di creazione quando si salvano dati di ordini o di log.
- Filtrare i dati in base all’ora corrente
- Ad esempio, recuperare solo i dati degli ultimi 7 giorni o cercare record con date future.
- Formattare date e ore per la visualizzazione
- Formattare i valori di data e ora per una migliore leggibilità durante la generazione di report.
- Gestire la scadenza dei dati usando l’ora corrente
- Ad esempio, determinare se un coupon è ancora valido confrontandolo con l’ora corrente.
Come potete vedere, recuperare e manipolare correttamente l’ora corrente in MySQL è una competenza importante nella gestione dei database.
Cosa imparerai in questo articolo
Questo articolo spiega in dettaglio i seguenti argomenti:
- Come recuperare l’ora corrente in MySQL (
NOW(),CURRENT_TIMESTAMP, ecc.) - Come modificare i formati di data e ora (usando
DATE_FORMAT()) - Calcoli di data e ora usando l’ora corrente (usando
INTERVAL) - Come cambiare il fuso orario (
SET SESSION time_zone) - Usare l’ora corrente come valore predefinito (
CURRENT_TIMESTAMP) - Errori comuni e come risolverli (FAQ)
Dalle basi all’uso avanzato della gestione del “tempo corrente” in MySQL, questa guida fornisce esempi SQL pratici. Assicurati di leggere fino alla fine.
2. Come recuperare l’ora corrente in MySQL
Elenco delle funzioni per recuperare l’ora corrente in MySQL
MySQL fornisce diverse funzioni per recuperare l’ora corrente. Comprendi le differenze e usale in modo appropriato.
| Function | Returns | Example |
|---|---|---|
NOW() | Current date and time (date + time) | SELECT NOW(); → 2025-02-11 16:00:00 |
CURRENT_TIMESTAMP | Same as NOW() (SQL standard) | SELECT CURRENT_TIMESTAMP; |
CURDATE() | Current date only | SELECT CURDATE(); → 2025-02-11 |
CURTIME() | Current time only | SELECT CURTIME(); → 16:00:00 |
Funzione NOW()
NOW() è la funzione più comunemente usata in MySQL per recuperare l’ora corrente.
Restituisce sia la data che l’ora.
SELECT NOW();
Esempio di output:
2025-02-11 16:00:00
NOW()restituisce l’ora corrente del sistema.- Poiché è influenzata dal fuso orario, l’ora visualizzata può variare a seconda dell’ambiente (spiegato in dettaglio nella sezione “Impostazioni del fuso orario”).
Come usare CURRENT_TIMESTAMP
CURRENT_TIMESTAMP si comporta quasi allo stesso modo di NOW(). È conforme allo standard SQL e può essere usato anche in altri database.
SELECT CURRENT_TIMESTAMP;
Esempio di output:
2025-02-11 16:00:00
Ottenere solo la data con CURDATE()
CURDATE() viene usata quando si desidera recuperare solo la data corrente (anno, mese, giorno).
SELECT CURDATE();
Esempio di output:
2025-02-11
Ottenere solo l’ora con CURTIME()
Se vuoi recuperare solo l’ora corrente (ora, minuti, secondi), usa CURTIME().
SELECT CURTIME();
Esempio di output:
16:00:00
Quale funzione dovresti usare?
| Purpose | Recommended Function |
|---|---|
| Retrieve both date and time | NOW() or CURRENT_TIMESTAMP |
| Retrieve date only | CURDATE() |
| Retrieve time only | CURTIME() |
3. Come formattare l’ora corrente in MySQL
Formattazione personalizzata con DATE_FORMAT()
Sintassi di base di DATE_FORMAT()
In MySQL, è possibile usare la funzione DATE_FORMAT() per modificare liberamente il formato di date e ore.
SELECT DATE_FORMAT(datetime_value, 'format_specifiers');
Esempio: Converti NOW() nel formato YYYY/MM/DD HH:MM
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');
Output:
2025/02/11 16:45
Elenco dei formati di specificatori comuni
| Specifier | Meaning | Example (2025-02-11 16:45:30) |
|---|---|---|
%Y | 4-digit year | 2025 |
%m | 2-digit month (01-12) | 02 |
%d | 2-digit day (01-31) | 11 |
%H | Hour (00-23, 24-hour format) | 16 |
%i | Minutes (00-59) | 45 |
%s | Seconds (00-59) | 30 |
Estrarre solo la parte dell’ora con TIME()
Se vuoi estrarre solo la parte dell’ora dal datetime restituito da NOW(), usa la funzione TIME().
SELECT TIME(NOW());
Output:
16:45:30
Estrarre parti con YEAR(), MONTH() e DAY()
Per estrarre solo parti specifiche, usa le seguenti funzioni.
| Function | Returns | SQL | Output Example (2025-02-11 16:45:30) |
|---|---|---|---|
YEAR() | Year | SELECT YEAR(NOW()); | 2025 |
MONTH() | Month | SELECT MONTH(NOW()); | 2 |
DAY() | Day | SELECT DAY(NOW()); | 11 |
Esempi pratici di formattazione
Il seguente SQL è utile per provare vari formati in pratica.
SELECT
NOW() AS 'Original datetime',
DATE_FORMAT(NOW(), '%Y/%m/%d') AS 'YYYY/MM/DD format',
DATE_FORMAT(NOW(), '%H:%i:%s') AS 'HH:MM:SS',
TIME(NOW()) AS 'Time only',
YEAR(NOW()) AS 'Year',
MONTH(NOW()) AS 'Month',
DAY(NOW()) AS 'Day';

4. Calcoli di Data/Ora Utilizzando l’Ora Corrente in MySQL
Aggiungere/Sottrarre con INTERVAL
Sintassi di Base
SELECT current_datetime + INTERVAL number unit;
SELECT current_datetime - INTERVAL number unit;
Aggiungere Tempo Basato su NOW()
Ad esempio, per recuperare la data/ora “una settimana dopo”:
SELECT NOW() + INTERVAL 7 DAY;
Esempio di output:
2025-02-18 16:30:00
| Unit | Meaning | Example |
|---|---|---|
| SECOND | Seconds | NOW() + INTERVAL 10 SECOND |
| MINUTE | Minutes | NOW() + INTERVAL 5 MINUTE |
| HOUR | Hours | NOW() + INTERVAL 2 HOUR |
| DAY | Days | NOW() + INTERVAL 10 DAY |
| MONTH | Months | NOW() + INTERVAL 3 MONTH |
Calcolare la Differenza tra Due Date con DATEDIFF()
SELECT DATEDIFF(NOW(), '2025-01-01');
Esempio di output:
30
Filtrare per Intervallo di Date con BETWEEN
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
5. Impostazioni del Fuso Orario MySQL
Verificare il Fuso Orario Corrente
SHOW VARIABLES LIKE '%time_zone%';
Esempio di output:
+------------------+----------------+
| Variable_name | Value |
+------------------+----------------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+----------------+
Cambiare il Fuso Orario per Sessione
SET SESSION time_zone = 'Asia/Tokyo';
Cambiare il Fuso Orario Predefinito del Server
Aggiungere quanto segue al file di configurazione (my.cnf):
[mysqld]
default_time_zone = 'Asia/Tokyo'
Ottenere l’Ora UTC con UTC_TIMESTAMP
SELECT UTC_TIMESTAMP();
Convertire in Ora Locale con CONVERT_TZ()
SELECT CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', 'Asia/Tokyo');
6. Come Impostare l’Ora Corrente come Valore Predefinito in MySQL
Impostare CURRENT_TIMESTAMP come Valore Predefinito
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Aggiornamenti Automatici con ON UPDATE CURRENT_TIMESTAMP
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Differenza tra DATETIME e TIMESTAMP
| Type | Affected by Time Zone | Can Set CURRENT_TIMESTAMP as Default |
|---|---|---|
TIMESTAMP | Yes | Yes |
DATETIME | No | No |
Perché Non Puoi Usare NOW() come Valore Predefinito e la Soluzione
ERROR 1067 (42000): Invalid default value for 'created_at'
Soluzione:
CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();
7. Errori MySQL Comuni e Soluzioni (FAQ)
Impossibile Usare NOW() come Valore Predefinito
Esempio di Errore
CREATE TABLE logs (
created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'
Soluzione
CREATE TABLE logs (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
L’Ora di CURRENT_TIMESTAMP è Errata
SHOW VARIABLES LIKE 'time_zone';
Soluzione
SET SESSION time_zone = 'Asia/Tokyo';
Il Risultato di NOW() è Sfasato di Un’Ora
SHOW VARIABLES LIKE 'system_time_zone';
Soluzione
SET GLOBAL time_zone = 'Asia/Tokyo';
Il Filtraggio di Intervallo con BETWEEN Non Funziona Come Previsto
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-28';
Soluzione
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
8. Buone Pratiche per Gestire l’Ora Corrente in MySQL
Quando Usare NOW() vs CURRENT_TIMESTAMP
| Use Case | Recommended |
|---|---|
Retrieve the current time in a SELECT statement | NOW() |
Automatically set the current time during INSERT | CURRENT_TIMESTAMP |
Set as the default value of a TIMESTAMP column | CURRENT_TIMESTAMP |
Quando Usare TIMESTAMP vs DATETIME
| Data Type | Affected by Time Zone | Storage Size |
|---|---|---|
TIMESTAMP | Yes | 4 bytes |
DATETIME | No | 8 bytes |
Memorizzare in UTC e Convertire in Ora Locale
SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo');
Usa >= e < invece di BETWEEN
SELECT * FROM orders
WHERE created_at >= '2025-02-01 00:00:00'
AND created_at < '2025-03-01 00:00:00';
Standardizza l’uso di INTERVAL
SELECT NOW() + INTERVAL 1 DAY;
Pulisci correttamente i dati vecchi
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR LIMIT 1000;


