Ir para conteúdo

Arquivado

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

Skyo

MySQL Convert/CAST

Recommended Posts

Bom to aqui com uma tabela MySQL que possui um campo VARCHAR ( 16 )...

Preciso fazer um select nesse campo tratando ele como DECIMAL pois os dados salvos nele são do tipo (,2 ou 10,8) por exemplo..

 

Então o SELECT teria que ordenar por esse campo tratando ele como DECIMAL.

 

Tentei o CAST e o CONVERT do MySQL e não funciona isso..

 

$captura = mysql_query("SELECT campo FROM tabela ORDER BY CONVERT(campo, DECIMAL) DESC");

$captura = mysql_query("SELECT campo FROM tabela ORDER BY CAST(campo AS DECIMAL) DESC");

Alguma idéia?

Usando O CAST eu consigo o seguinte, números tipo 1,20 ficam primeiro que 1,54 por exemplo, mas um campo com o valor 0,6 fica depois de 1,20 e isso ta certo, parece que as virgulas são ignoradas... Então consigo uma ordem parecida com:

1,20

1,54

0,6

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tópico movido

 

Origem: Programação » PHP

Destino: Gerenciamento de Banco de Dados » MySQL

E a Lucy owna!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inseri a função REPLACE dentro da CAST que tava depois do ORDER BY.

 

$captura = mysql_query("SELECT campo FROM tabela ORDER BY CAST(REPLACE(campo, ',', '') AS DECIMAL) DESC");

Mas pelo visto não adianta mto..

Um campo ,60 por exemplo tirando a virgula fode..

 

Tentei dar o REPLACE com um '.' (ponto) mas tb não resolver (queria ver se o MySQL interpretava o DECIMAL corretamente...

Alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

meu avô costumava dizer q tudo q começa errado soh pode terminar errado... se o campo guarda valores decimais ele deve ser decimal.... e ',60' simplismente nao eh um valor aceitavel.

 

porem..........................

 

 

SELECT campo FROM tabela ORDER BY

SUBSTRING_INDEX(campo, ',' , 1)DESC ,

SUBSTRING_INDEX(campo, ',' , -1)DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, não foi uma opção ser VARCHAR, ele é alterado por um sistema em outra linguagem e só funcionou com o campo em VARCHAR..

 

Mas..

Esse seu SELECT não funcionou mto bem, números maiores que 10,xx não são exibidos (ou melhor, ficam pra trás)...

Obs: estou usando LIMIT 5 no final da query, não sei se isso vai alterar em nada esse seu SELECT..

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT campo FROM tabela ORDER BY

(SUBSTRING_INDEX(campo, ',' , 1) +0) DESC ,

(SUBSTRING_INDEX(campo, ',' , -1) +0) DESC

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.