In MySql le date hanno questo formato: AAAA-MM-GG, mentre i datetime AAAA-MM-GG OO:MM:SS (i millisecondi non sono ancora gestiti, nemmeno dal campo timestamp)
Sono due le funzioni per giocare con le date in MySql:
- DATE_FORMAT che serve per formattare la data dal formato di MySql a quello che vogliamo noi;
- STR_TO_DATE che serve ad eseguire l’operazione contraria, ossia data la nostra stringa con la data rappresentata secondo le nostre esigenze la converte nel formato che piace a MySql.
DATE_FORMAT (data da formattare,pattern)
La funzione prense in input la data o il timestamp in formato MySql e restituisce un varchar con la formattazione desiderata esplicitata nel pattern.
Il pattern è una stringa con caratteri speciali preceduti dal %.
Vediamo la lista completa di questi caratteri speciali, presa dalla documentazione ufficiale di MySql:
CARATTERE | DESCRIZIONE |
%a | Giorno della settimana abbreviato (Sun..Sat) |
%b | Giorno del mese abbreviato (Jan..Dec) |
%c | Mese numerico (0..12) |
%D | Giorno del mese con suffisso inglese (0th, 1st, 2nd, 3rd, …) |
%d | Giorno del mese numerico (00..31) |
%e | Giorno del mese numerico (0…31) |
%f | Microsecondo (000000..999999) |
%H | Ora (00,…23) |
%h | Ora (01,….12) |
%I | Ora (01,….12) |
%i | Minuti (00,..59) |
%j | Giorno dell’anno (00,…366) |
%k | Ora (00,….23) |
%l | Ora (1,…12) |
%M | Nome del mese (January..December) |
%m | Nome del mese (00,..12) |
%p | AM o PM |
%r | Hh:mm:ss seguito da AM o PM |
%S | Secondi (00,..59) |
%s | Secondi (00,..59) |
%T | Orario (hh:mm:ss con le 24 ore) |
%U | Settimana (00..53) dove Domenica è il primo giorno della settimana |
%u | Settimana (00..53) dove Lunedì è il primo giorno della settimana |
%V | Settimana (01..53) dove Domenica è il primo giorno della settimana, è usato assieme alla %X |
%v | Settimana (01..53) dove Domenica è il primo giorno della settimana, è usato assieme alla %x |
%W | Giorno della settimana (Sunday…Saturday) |
%w | Giorno della settimana (0= Sunday,….6=Saturday) |
%X | Anno per la settimana dove Domenica è il primo giorno della settimana, numerico, 4 cifre usato con %V |
%x | Anno per la settimana dove Domenica è il primo giorno della settimana, numerico, 4 cifre usato con %v |
%Y | Anno, numerico, 4 cifre |
%y | Anno, numerico 2 cifre |
Esempi:
select DATE_FORMAT(current_timestamp,'%d-%m-%Y %h:%i:%s') as 'data formattata';
Produce '31-08-2011 12:13:07'
select DATE_FORMAT(current_timestamp,'%d-%m-%Y %r') as 'data formattata';
Produce '31-08-2011 12:14:21 PM'
STR_TO_DATE (stringa_da_formattare,pattern)
Questa funzione torna una data in formato mysql data la nostra stringa e specificato il pattern di decifrazione della stessa.
Le regole per il pattern fanno riferimento alla tabella prima descritta.
Esempi:
select STR_TO_DATE('31/08/2011','%d/%m/%Y');
Produce '2011-08-31'
select STR_TO_DATE('31/08/2011 Ora:12 Minuto:23 Secondo:50 PM','%d/%m/%Y Ora:%h Minuto:%i Secondo:%s %p');
Produce: '2011-08-31 12:23:50'