Problema de SQL ORDER BY date

Você pode por favor me ajudar na resolução deste problema. Estou tentando ordenar os resultados de uma consulta SQL por data, mas não estou obtendo os resultados de que preciso.

A consulta que estou usando é:

SELECT date FROM tbemp ORDER BY date ASC 

Resultados são:

 01/02/2009 03/01/2009 04/06/2009 05/03/2009 06/12/2008 07/02/2009 

Os resultados devem ser:

 06/12/2008 03/01/2009 01/02/2009 07/02/2009 

Eu preciso selecionar a data no formato acima.

Sua ajuda é muito apreciada.

Parece que sua coluna de data não é do tipo datetime, mas varchar. Você precisa convertê-lo em datetime ao ordenar:

 select date from tbemp order by convert(datetime, date, 103) ASC 

style 103 = dd/MM/yyyy ( msdn )

Parece-me que sua coluna não é uma coluna de data, mas uma coluna de texto (varchar / nvarchar, etc). Você deve armazená-lo no database como uma data, não uma string.

Se você tiver que armazená-lo como uma string por algum motivo, armazene-o em um formato classificável, por exemplo, aaaa / MM / dd.

Como najmeddine mostra, você poderia converter a coluna em cada access, mas eu tentaria muito não fazer isso. Ele fará com que o database trabalhe muito mais – ele não conseguirá manter os índices apropriados etc. Sempre que possível, armazene os dados em um tipo apropriado aos dados em si.

Não sei qual dbms você está usando, no entanto, eu faria assim no Microsoft SQL:

 select [date] from tbemp order by cast([date] as datetime) asc 

isso funciona para mim:

SELECT datefield FROM myTable ORDER BY CONVERT(DATE, datefield) ASC

A resposta a seguir pode ajudá-lo

Realize a sua data de encomenda pelo seu identificador de data, mas use a function to_char () na cláusula select e use algum outro identificador na cláusula select para a data

por exemplo

 SELECT TO_CHAR(DISPDATE1,'DD/MM/YYYY') AS DISPDATE, SUM(APPLCOUNT) AS APPLIED, SUM(CONFCOUNT) AS CONFIRMED FROM ( SELECT COUNT(ID) AS APPLCOUNT, 0 AS CONFCOUNT, STUDENT.APPLIED_ON AS DISPDATE1 FROM STUDENT WHERE STUDENT.ID = P_ID GROUP BY STUDENT.APPLIED_ON UNION SELECT 0 AS APPLCOUNT, COUNT(ID) AS CONFCOUNT, STUDENT.CONFIRMED_ON AS DISPDATE1 FROM STUDENT WHERE STUDENT.ID = P_ID GROUP BY STUDENT.CONFIRMED_ON ) GROUP BY DISPDATE1 ORDER BY DISPDATE1; 

SELECT CONVERT (char (19), CAST (data como data e hora), 101) como [date]
FROM tbemp ORDER BY convert (data e hora, data, 101) ASC

Tente usar este trabalho para mim

 select * from `table_name` ORDER BY STR_TO_DATE(start_date,"%d-%m-%Y") ASC 

onde start_date é o nome do campo

Isso pode ajudá-lo no mysql, php.

 //your date in any format $date = $this->input->post('txtCouponExpiry'); $day = (int)substr($date, 3, 2); $month = (int)substr($date, 0, 2); $year = (int)substr($date, 7, 4); $unixTimestamp = mktime(0, 0, 0, $year, $day, $month); // insert it into database 'date'->$unixTimestamp; //query for selecting order by date ASC or DESC select * from table order_by date asc; 

tente isso

 Order by Convert(datetime,@date) desc 

Eu queria editar vários events em ordem cronológica descendente, e acabei de fazer um:

 select TO_CHAR(startdate,'YYYYMMDD') dateorder, TO_CHAR(startdate,'DD/MM/YYYY') startdate, ... from ... ... order by dateorder desc 

E funciona para mim. Mas certamente não adaptado para todos os casos … Só espero que ajude alguém!