Mysql: selezionare anno o mese da campo timestamp
12/03/2012Solitamente i campi data vengono gestiti con la memorizzazione del valore di unix time e pertanto per effettuare delle selezioni sulla base di mese o anno prescelto dall'utente occorre passarre attraverso operazioni di conversione.
Pochi conoscono la funzione di MySql FROM_UNIXTIME che converte un valore numerico di UNIX timestamp in data e orario nel formato 'YYYY-MM-DD HH:MM:SS'(stringa) oppure YYYYMMDDHHMMSS.uuuuuu (numerico).
Se utilizziamo questa funzione possiamo fare la selezione senza passare da acrobatiche e spesso lunghe, conversioni.
Mettiamo, ad esempio, di voler selezionare tutti i recordi che sono datati 2012, la query sarà semplicemente:
SELECT * FROM nome_tabellla where from_unixtime(dat,'%Y') = 2012
La query può anche esser impostata con condizioni multiple, ad esempio tutti i record del marzo 2012
SELECT * FROM nome_tabella where (from_unixtime(dat,'%Y') = '2012' && from_unixtime(dat,'%m') = '3')
e per fare automaticamente la selezione di mese e anno corrente
$mese = date("m");
$anno = date("Y");
$query = "SELECT * FROM nome_tabella where (from_unixtime(dat,'%Y') = $anno && from_unixtime(dat,'%m') = $mese";