Skip to content

Instantly share code, notes, and snippets.

@beraldo
Created April 8, 2015 15:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beraldo/1ca4133c8d22f08159c2 to your computer and use it in GitHub Desktop.
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
-- 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