Quando uma coluna guarda um valor variado pode-se facilmente dá-la o tipo VARCHAR, ou pela ocasião ou pela inexperiência do desenvolvedor que criou/projetou a tabela. Só que num determinado momento o cliente pede para que a listagem dos registros desta tabela seja feita por esta coluna.
Ah, vamos mudar o tipo a coluna e fica resolvido, errado porque dependendo o tipo que você escolher os registros podem sofrer pequenas variações. Por exemplo o VARCHAR 7,7 pode ficar apenas 7 se você especificar, FLOAT, DECIMAL, INT ou qualquer outro tipo numérico pois teria que converter a virgula separadora para ponto.
Existe uma solução mais elegante para este tipo de caso. Você nem precisa mexer na bagunça do POGamador anterior (POG = Programação Orientada à Gambiarra). Você pode utlizar a função CAST() do MySQL. Esta função interpreta determinada coluna com o tipo que você especificar.
Suponha que temos a tabela “prova”, com as colunas “nome” e “nota” (ambos do tipo VARCHAR), para ordenarmos pela nota usariamos algo como:
1 2 3 | SELECT nome, nota, CAST(REPLACE(nota,',','.') AS DECIMAL(20,2)) AS nota_convertida FROM prova ORDER BY CAST(nota AS UNSIGNED) DESC |
Repare que usei CAST(nota AS DECIMAL(10,2)) para tentar pegar a coluna com o valor convertido, mas isso não funcionará quando o separador não for ponto, como citei anteriormente (Se alguém conhece uma forma de converter fique a vontade para compartilhar conosco).
Mas que pode ser tratado via PHP facilmente:
$nota = str_replace(',','.',$rs['nota']);
* Pequena correção: utilizando a função REPLACE() do MySQL você pode substituir caracteres.
Continuando, a função CAST() pode converter/interpretar as colunas nos seguintes formatos:
RSS feed para os comentários desse post. URL de TrackBack
19.05.2010 às 16:08
Muito bom o artigo. Parabéns