Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Desative a notação científica MySQL


Você provavelmente está procurando o FORMAT ou ROUND função:

Usando FORMAT() , dependendo da sua localidade e suas necessidades específicas, talvez seja necessário substituir o separador de milhares :
mysql> SELECT FORMAT(9.755046187483832e17,0);
975,504,618,748,383,200

mysql> SELECT REPLACE(FORMAT(9.755046187483832e17,0), ',','');
975504618748383200

Por outro lado, ROUND() sendo um numérico função, ela só gera dígitos :
mysql> SELECT ROUND(9.755046187483832e17,0);
975504618748383200

Consulte http://sqlfiddle.com/#!2/d41d8/17614 por brincar com isso.

EDITAR: Como você notou, os dois últimos dígitos são arredondados para 00 . Isso é por causa de DOUBLE limites de precisão. Você tem que lembrar que duplo são aproximados . Se você precisar de valores precisos e/ou mais dígitos do que os disponíveis com a precisão de 16 bits de double, provavelmente precisará alterar o tipo de sua coluna para DECIMAL . Por padrão DECIMAL tem precisão de 10 dígitos (10 base 10 dígitos). Você pode solicitar explicitamente até 65 dígitos.

Por exemplo, se você precisar de até 20 dígitos de precisão, escreva algo assim:
CREATE TABLE tbl (myValue DECIMAL(20), ...

Consulte http://dev.mysql.com/ doc/refman/5.6/en/fixed-point-types.html

Observe, no entanto, que as coisas não que simples. A seleção da coluna decimal pode convertê-la silenciosamente em double (ou grande ?) perdendo assim a precisão extra. Você pode ter que converter explicitamente para string para preservar a precisão total. Isso significa que você pode ter que lidar com isso no nível do aplicativo.
create table tbl (dblValue DOUBLE, decValue DECIMAL(20,0));
insert into tbl values (975504618748383289, 975504618748383289);

SELECT dblValue, decValue FROM tbl;
--> DBLVALUE            DECVALUE
--> 975504618748383200  975504618748383200

SELECT CAST(dblValue AS CHAR), CAST(decValue AS CHAR) FROM tbl;
--> CAST(DBLVALUE AS CHAR)  CAST(DECVALUE AS CHAR)
--> 9.755046187483832e17    975504618748383289

Consulte http://sqlfiddle.com/#!2/d5f58/2 por exemplo.