Ordenar Data [RESOLVIDO]

Bom dia,

eu preciso fazer um select no banco de dados na ordem das datas, por causa que é tem uma mascara a data é um campo string. Como faço para selecionar por ordem de data?

Código do select:

con_agenda2.executeSQL("select * from agenda order by agedata");

dessa forma ele não mostra na ordem correta.

Obrigado

Como é que as datas são cadastradas na tabela? Qual é o tipo da coluna que contém as datas?

Estou usando o banco de dados postgreesql, então o campo é character varying.

Tudo bem.
Como é que a data é cadastrada?
Ela é cadastrada como “ano-mês-dia” (por exemplo, 20120814) ou então é usada aquela bizarrice de usar primeiro o dia, depois o mês e então o ano (“14/08/2012”)? Ou então mais bizarramente, “14/8/2012” ou pior ainda, “14 de agosto de 2012”?

Se for dia, mês e ano, não tem como ordenar data sem fazer algumas coisas bizarras.

É melhor usar sempre ano, mês, dia porque isso faz com que a ordenação seja automática (igual à ordenação de strings).

[quote=entanglement]Tudo bem.
Como é que a data é cadastrada?
Ela é cadastrada como “ano-mês-dia” (por exemplo, 20120814) ou então é usada aquela bizarrice de usar primeiro o dia, depois o mês e então o ano (“14/08/2012”)? Ou então mais bizarramente, “14/8/2012” ou pior ainda, “14 de agosto de 2012”?

Se for dia, mês e ano, não tem como ordenar data sem fazer algumas coisas bizarras.

É melhor usar sempre ano, mês, dia porque isso faz com que a ordenação seja automática (igual à ordenação de strings).
[/quote]

depois de falar que é bizarro tantas coisas, é capaz de algumas informações serem omitidas a partir de agora rsrs

mas pq será q o DB tem os tipos TimeStamp, Date, Time e etc?

http://www.postgresql.org/docs/7.4/static/datatype-datetime.html

Pois é, normalmente as pessoas têm dificuldade de usar os tipos de dados do banco de dados que lidam diretamente com datas e horas por não terem aprendido isso (ou por falta de interesse, mas isso não vem ao caso).

Casualmente, o Oracle também tem esses mesmos tipos .

Eu coloquei o campo do banco de dados como date agora. E ele retorna uma data ano/mes/dia. Eu gostaria de organizar dia/mes/ano para melhor entendimento de um leigo.

E o que um “leigo” vai estar fazendo, consultando seu banco de dados ? Aqui usamos Timestamp, acha que na tela aparece ao usuário final, um Timestamp ?
É por isso que existem formas de manipular data, com o Calendar (entre outros). Você lê o campo no formato de date no banco e o formata para aparecer na tela ao usuário final como desejar. Então, na tela, obviamente, podes usar “dd/MM/yyyy”, pois é o padrão BR.

Lucas, uma coisa boa de usar campos do tipo Date ou Timestamp é que eles ocupam menos espaço que um VARCHAR que represente a data desse jeito tosco (dia/mês/ano), que você deve ter visto que não presta para ordenar, encontrar (por exemplo, se você tem a data 14 de agosto de 2012, você é obrigado, se for um VARCHAR e não houver padronização nenhuma, procurar por “14/8/2012”, “14/08/2012”, e outras variações desse mesmo tema.

Se você tem um Date ou Timestamp, 14 de agosto de 2012 é sempre 14 de agosto de 2012, e é representado internamente no banco como um número, o que ocupa bem menos espaço que um VARCHAR.

Ele mostra ano/mes/dia, mas ele na verdade guarda em um outro formato, que é um número simples.

Tudo é questão de mostrar a data de forma adequada. Por exemplo, seu banco pode já lhe retornar no formato que você precisa (por exemplo, ele pode retornar a data por extenso, dependendo do banco de dados).

Como faço para demonstrar esses dados na mascara “dd/MM/yyyy” como dito pelo nel? Pois eu gostaria de carregar um jtable e mostrar o campo data nesse formato.

Obrigado.

[quote=lucaslzl]Como faço para demonstrar esses dados na mascara “dd/MM/yyyy” como dito pelo nel? Pois eu gostaria de carregar um jtable e mostrar o campo data nesse formato.

Obrigado.[/quote]

O que mais tem na internet são exemplos de como formatar a data, aqui no GUJ mesmo, tem inúmeros.
Mas segue um exemplo para ilustrar o que eu queria dizer, tanto com Timestamp quanto com Date.
É java.sql.Timestamp, java.util.Calendar, java.text.SimpleDateFormat e java.util.Date ok?

[code]
Calendar calendar = Calendar.getInstance ();
Timestamp timestamp = new Timestamp (calendar.getTime().getTime());

	System.out.println("Formato timestamp: " + timestamp);
	
	//formatando a data em dia/mes/ano
	SimpleDateFormat dateFormat = new SimpleDateFormat ("dd/MM/yyyy");
	String format1 = dateFormat.format (new Date (timestamp.getTime()));
	System.out.println("Data formatada. Modelo 1: " + format1);
	
	Date date = calendar.getTime();
	System.out.println("Date: " + date);
	String format2 = dateFormat.format (date);
	System.out.println("Data formata: Modelo 2: " + format2);[/code]

Muito obrigado pela ajuda pessoal!