Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ecostacurta

Ordenação de string.

Recommended Posts

Tenho um banco de dados com um campo de datas, mas que foi criado como VARCHAR. O problea é que quero ordenar esse campo mas o que ele faz é ordenar pelos primeiros caracteres. Por exemplo: tenho os valores 10/01/1998, 02/03/1998, 21/10/19998,03/12/1998. Ao ordenar no select ele me traz como resultado:01/03/199803/12/199810/01/199821/10/1998Sendo que eu quero como resultado:10/01/199801/03/199821/10/199803/12/1998Uma opção seria ordenar pelo mês, no caso do meu campo, ordenar à partir da 4 casa.Obrigado à todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar o comando Spit para quebrar na barra ...Assim você teria:<%Mensagem = "Aqui você resgata a data do BD"Teste = Split(Mensagem, "/")%>Você terá:teste(0) = diateste(1) = mesteste(2) = anoAi você manda ordenar por teste(2), teste(1) e teste(0) ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se entendi.

 

O meu select no código é:

 

$consulta=mysql_query("select * from tb_curso where dataInicio like '%$ano%' order by ??????)");

 

onde tb_curso é minha tabela;

dataInicio é o campo onde está guardada a data (lembrando não é um campo date mas varchar)

 

Eu tentei usar o comando Split, mas acho que não estou montando o código corretamente.

Preciso criar uma variável com o comando split, por exemplo:

 

$data=Split(???, (/));

$consulta... order by $data(1) ??????

 

Se puder mastigar um pouco mais... sei que é pedir muito... Mas agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm... rapaz o MySQL trabalha com a data no formato aaaa-mm-dd.

Ordenar um campo string com valor de data sem ser neste formato fica embaçado...

Mas é possível, neste caso você cria no Select um novo campo utilizando o Concat para concatenar textos, e o Mid para obter parte de uma string. Ex considerando que está gravando as datas no formato dd/mm/aaaa:

CONCAT(MID(ALU_DATA,7,4),'-',MID(ALU_DATA,4,2),'-',MID(ALU_DATA,1,2)) AS NOVADATA

Onde ALU_DATA é o nome do campo que utilizei para testes.

Então resumindo o SQL ficaria assim:

SELECT *,CONCAT(MID(dataInicio ,7,4),'-',MID(dataInicio ,4,2),'-',MID(dataInicio ,1,2)) AS NOVADATA

FROM tb_curso

ORDER BY NOVADATA

Ps: estou utilizando a versão 5.0.16 do mysql, mas acredito que estas funções funcionem em versões anteriores.

Mais info: Funções de data e hora, Funções de String.

Good luck! :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.