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");
Como é que as datas são cadastradas na tabela? Qual é o tipo da coluna que contém as datas?
lucaslzl
Estou usando o banco de dados postgreesql, então o campo é character varying.
E
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).
nel
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).
depois de falar que é bizarro tantas coisas, é capaz de algumas informações serem omitidas a partir de agora rsrs
G
GilsonNunes
mas pq será q o DB tem os tipos TimeStamp, Date, Time e etc?
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 .
lucaslzl
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.
nel
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.
E
entanglement
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.
E
entanglement
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).
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.
nel
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.
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?
Calendarcalendar=Calendar.getInstance();Timestamptimestamp=newTimestamp(calendar.getTime().getTime());System.out.println("Formato timestamp: "+timestamp);//formatando a data em dia/mes/anoSimpleDateFormatdateFormat=newSimpleDateFormat("dd/MM/yyyy");Stringformat1=dateFormat.format(newDate(timestamp.getTime()));System.out.println("Data formatada. Modelo 1: "+format1);Datedate=calendar.getTime();System.out.println("Date: "+date);Stringformat2=dateFormat.format(date);System.out.println("Data formata: Modelo 2: "+format2);