Ordenar Campo por data

Delphi

30/04/2009

Fala Galera.

Tenho Um campo em meu banco de dados que é Varchar e ele recebe data, ai eu tenho que mostrar esse campo ordenado por data, tipo a tada menor para data maior mas quando eu coloco ´order by data´ ele ordena pelo dia só e eu queria ordenar pela dia , mês e ano.

Alguem poderia me ajudar.

Vleu


Cleiflavio

Cleiflavio

Curtidas 0

Respostas

Cleiflavio

Cleiflavio

30/04/2009

Galera faltou uma OBS.

Uso Firebird 2.0 Interbase, Delphi e IbExpert.


Valeuu


GOSTEI 0
Rjun

Rjun

30/04/2009

Você quer uma ordenação como se o campo fosse um DateTime? Por que você definiu um varchar para receber data? Para que a ordenação funcione você teria que ordernar pelo inverso da data armazenada. Por exemplo se a data é 30042009 teria que ordernar por 20090430.


GOSTEI 0
Lehapan

Lehapan

30/04/2009

faça um CAST como campo.

SELECT
  CAST( SEU_CAMPO_STRING_DATA AS DATE)
FROM
  TABELA


Obs.: os dados do seu campo string devem estar no formato ´dia/mes/ano´.

espero ter ajudado.


GOSTEI 0
Marcosrocha

Marcosrocha

30/04/2009

cleiflavio realmente gravar datas em campos Varchar no banco de dados não é uma coisa legal quando se precisa filtrar ou ordenar por elas.
Se você tiver CERTEZA que todos os registros possuem uma data válida (seja ela null ou dd/mm/yyyy), você pode usar a dica do lehapan para ordenar seu select.
SELECT
  CAST(SEU_CAMPO_STRING_DATA AS DATE) AS ORDEM, OUTRO_CAMPO
FROM
  TABELA
ORDER BY 1
Este código converte a data em ´Date´ para que o FireBird possa ordenar por ela corretamente (primeiro ano, depois mês e por último dia)


GOSTEI 0
Cleiflavio

Cleiflavio

30/04/2009

Galera tentei usar o Cast como vcs me falaram para mudar de string para data , mas como meu campo está como Varchar quando executo meu select ele fala que não achou meu campo data no meu sql_dataset.

select id, n_caixa, tabela_caixa.caixa, reserva, hora, tabela_hospital.codigo, hospital, tabela_hospital.cidade from tabela_agendamento LEFT OUTER JOIN tabela_caixa ON tabela_caixa.n_caixa = tabela_agendamento.n_caixa LEFT JOIN tabela_hospital ON tabela_hospital.hospital = tabela_agendamento.hospital
where n_caixa = ´´´ + n_caixa.Text + ´´´ Order by reserva ´;

O meu campo que eu estou usando como data é o Campo RESERVA.

Esse select é uma busca de um produtoque eu preciso ordenar por data que é o campo ´RESERVA´

Será que assim eu ajudo mais.


GOSTEI 0
Marcosrocha

Marcosrocha

30/04/2009

Select id, n_caixa, tabela_caixa.caixa, reserva, hora, tabela_hospital.codigo, hospital, tabela_hospital.cidade from tabela_agendamento
LEFT OUTER JOIN tabela_caixa ON tabela_caixa.n_caixa = tabela_agendamento.n_caixa
LEFT JOIN tabela_hospital ON tabela_hospital.hospital = tabela_agendamento.hospital
Where n_caixa = ´´´ + n_caixa.Text + ´´´ Order by Cast(reserva as Date)´; // O Segredo está aqui no Order by



GOSTEI 0
Cleiflavio

Cleiflavio

30/04/2009

MarcosRocha, Deu certo era isso mesmo.

Valeuuuuu


GOSTEI 0
POSTAR