2012-05-17 17 views
86

Sono un po 'confuso su come ordinare per formati di data.Formato data MySQL GG/MM/AAAA selezionare query?

Per il formato YYYY-MM-DD si dovrebbe fare questo: ...ORDER BY date DESC...

Come si ordinare da DD/MM/YYYY?

Questo non funziona:

SELECT * FROM $table ORDER BY DATE_FORMAT(Date, '%Y%m%d') DESC LIMIT 14 

risposta

94

È possibile utilizzare STR_TO_DATE() per convertire le stringhe di valori di data MySQL e ORDER BY il risultato:

ORDER BY STR_TO_DATE(datestring, '%d/%m/%Y') 

Tuttavia, si sarebbe saggio per convertire la colonna per il tipo di dati DATE invece di utilizzare stringhe.

3

ORDER BY un tipo di data non dipende dal formato data, il formato di data, solo per mostrare, nel database, sono stessi dati.

+0

Il formato può essere utilizzato per ordinare (se qualcuno lo desidera davvero, sembra strano per me), ma tale tipo non può essere basato sull'indice, quindi [b] è costoso [/ b], è possibile eseguire solo l'ordinamento su colonne ben progettate con indice (veloce) e ottimizzato dal server –

29
SELECT DATE_FORMAT(somedate, "%d/%m/%Y") AS formatted_date 
.......... 
ORDER BY formatted_date DESC 
+3

Sono solo io, o il '% l' non funziona? Dà '12' per ogni mese e ho dovuto passare a'% m'. – beroe

+1

% l è per ore https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format @beroe –

118

Indovinare probabilmente si desidera semplicemente formattare la data di uscita? allora questo è quello che stai cercando

SELECT *, DATE_FORMAT(date,'%d/%m/%Y') AS niceDate 
FROM table 
ORDER BY date DESC 
LIMIT 0,14 

Oppure vuoi effettivamente ordinare per Giorno prima di Mese prima di Anno?

+1

Desidero le 14 ultime date/registrazioni:) Tuttavia, il formato nel database è "GG/MM/AAAA"! –

+0

La data nel database è un tipo di data reale o è un tipo di stringa? – trapper

+2

'mysql> DESCRIBE Table;' e incolla l'output – trapper

3

per il mio caso questo ha funzionato

str_to_date(date, '%e/%m/%Y') 
0

Data Format in MySQL utilizzando codeigniter

 $from=$_POST['from']; 
     $to=$_POST['to']; 
     $table='Your table'; 
     $alias="count(userid)"; 
     $groupby="date_format(yourdate,('%Y-%m'))"; 
     $orderby=array('mostdrill'=>'DESC'); 
     $where="yourdate between '".date('Y-m-d',strtotime($from))."' and '".date('Y-m-d',strtotime($to))."'"; 
     $userdata=$this->yourmodel->function name($alias,$table,$where,'',$orderby,"",$groupby); 

Spero che sia utile to know more click here

0

Se l'ora è importante, ho usato str_to_date(date, '%d/%m/%Y %T'), il %T mostra l'ora in formato hh:mm:ss.

3

Suppongo che probabilmente desideri semplicemente formattare la data di uscita? allora questo è quello che stai cercando

SELECT *, DATE_FORMAT(date,'%d/%m/%Y') AS niceDate 
FROM table 
ORDER BY date DESC 
LIMIT 0,14 

Oppure vuoi effettivamente ordinare per Giorno prima di Mese prima di Anno?