English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai come utilizzare data e ora in SQL.
Oltre alle stringhe e ai numeri, è spesso necessario memorizzare valori di data e / o ora nel database, ad esempio la data di nascita dell'utente, la data di assunzione del dipendente, la data di un evento futuro, la data e l'ora di creazione o modifica di una riga specifica nella tabella, ecc.
Questo tipo di dati è chiamato dati temporanei e ogni motore di database ha un formato di archiviazione predefinito e un tipo di dati per memorizzarli. La tabella seguente mostra i tipi di dati temporali supportati dal server di database MySQL.
Tipo | Formato predefinito | Valori ammessi |
---|---|---|
DATE | YYYY-MM-DD | 1000-01-01 - |
TIME | HH:MM:SS o HHH:MM:SS | -838:59:59 - |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 - |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 - |
ANNO | YYYY | 1901 - |
Il formato del valore DATE è YYYY-MM-DD, dove YYYY rappresenta l'anno intero (4 cifre), mentre MM e DD rappresentano rispettivamente la parte mensile e giornaliera della data (due cifre con zero iniziale). I valori temporali di solito adottano il formato HH:MM:SS, dove HH, MM e SS rappresentano rispettivamente l'ora, i minuti e i secondi.
Le seguenti istruzioni illustrano come inserire valori di data nel database.
INSERT INTO employees (emp_name, hire_date, salary) VALUES ('Adam Smith', '2015-06-24', 4500);
Attenzione:Nel MySQL, la parte ore del valore temporale potrebbe essere maggiore, perché MySQL le considera come tempo di esecuzione. Questo significa che il tipo di dati temporali può essere utilizzato non solo per rappresentare un momento della giornata (deve essere inferiore a 24 ore), ma anche per rappresentare l'intervallo di tempo tra due eventi, che potrebbe essere maggiore di 24 ore, anche negativo.
Quando si utilizza un database di grandi applicazioni, di solito è necessario memorizzare il tempo di creazione del record o l'ultima modifica nel database, ad esempio, memorizzare la data e l'ora di registrazione dell'utente o dell'ultima modifica della password dell'utente.
In MySQL, è possibile utilizzare la funzione NOW() per inserire il timestamp corrente, come segue:
-- Sintassi del database MySQL INSERT INTO users (name, birth_date, created_at) VALUES ('Bilbo Baggins', '1998-04-16', NOW());
Ma se non si desidera inserire manualmente la data e l'ora corrente, è sufficiente utilizzare le proprietà di inizializzazione e aggiornamento automatici dei tipi di dati TIMESTAMP e DATETIME.
Per assegnare automaticamente attributi, specificare le clausole DEFAULT CURRENT_TIMESTAMP e ON UPDATE CURRENT_TIMESTAMP nella definizione della colonna, come segue:
-- Sintassi del database MySQL CREATE TABLE users ( id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL UNIQUE, birth_date DATE NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
Attenzione:L'inizializzazione automatica e l'aggiornamento dell' tipo DATETIME sono disponibili solo a partire dalla versione 5.6.5 di MySQL. Se si utilizza una versione più vecchia, utilizzare TIMESTAMP.
In alcuni casi, si desidera ottenere solo una parte della data o dell'ora. In MySQL, è possibile utilizzare funzioni specifiche progettate per estrarre parti dei valori temporali, come YEAR(), MONTH(), DAYOFMONTH(), MONTHNAME(), DAYNAME(), HOUR(), MINUTE(), SECOND() e così via.
La seguente query SQL estrarrà la parte annuale del valore della colonna birth_date, ad esempio se la data di nascita di qualsiasi utente è 1987-01-14, YEAR(birth_date) restituirà 1987.
mysql> SELECT name, YEAR(birth_date) FROM users;
Allo stesso modo, è possibile utilizzare la funzione DAYOFMONTH() per ottenere un giorno specifico del mese, ad esempio se la birth_date di qualsiasi utente è 1986-10-06, DAYOFMONTH(birth_date) restituirà 6.
mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;
如果要在结果集中使用更具描述性和可读性的日期格式,则可以使用DATE_FORMAT()和TIME_FORMAT()函数重新格式化现有的日期和时间值。
下面的SQL语句将以更易读的格式设置users在表中birth_date列的值的格式,例如14 gennaio 1987 al 14 gennaio 1987.
mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;