Created
April 8, 2015 15:50
-
-
Save beraldo/1ca4133c8d22f08159c2 to your computer and use it in GitHub Desktop.
"Solução" para quem fez gambiarra e salvou números decimais em campo varchar. Neste exemplo, faremos um casting do valor do campo, para, em seguida, somar todos eles
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Criando uma tabela para armazena ros valores numéricos em campo varchar | |
-- ATENÇÃO: ISSO É ERRADO! O correto seria usar campo DECIMAL | |
mysql> create table produtos( | |
-> valor varchar(10) | |
-> ); | |
Query OK, 0 rows affected (0.03 sec) | |
-- Inserindo alguns valores | |
mysql> insert into produtos values('1,10'), ('2,20'), ('3,30'); | |
Query OK, 3 rows affected (0.01 sec) | |
Records: 3 Duplicates: 0 Warnings: 0 | |
-- Exibe os valores | |
mysql> select * from produtos; | |
+-------+ | |
| valor | | |
+-------+ | |
| 1,10 | | |
| 2,20 | | |
| 3,30 | | |
+-------+ | |
3 rows in set (0.00 sec) | |
-- A soma exibe apenas a parte inteira, ignorando a parte decimal, pois a vírgula não é separador decimal válido | |
mysql> select sum(valor) from produtos; | |
+------------+ | |
| sum(valor) | | |
+------------+ | |
| 6 | | |
+------------+ | |
1 row in set, 3 warnings (0.00 sec) | |
-- GAMBIARRA mode on | |
-- Antes da soma, faremos um casting do valor com a vírgula trocada por ponto | |
mysql> select sum(cast(REPLACE(valor, ',', '.') as decimal(8,2))) as total from produtos; | |
+-------+ | |
| total | | |
+-------+ | |
| 6.60 | | |
+-------+ | |
1 row in set (0.01 sec) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment