Вероятно търсите FORMAT
или ROUND
функция:
Използване на FORMAT()
, в зависимост от локала и вашите специфични нужди, може да се наложи да замените разделителя на хилядите :
mysql> SELECT FORMAT(9.755046187483832e17,0);
975,504,618,748,383,200
mysql> SELECT REPLACE(FORMAT(9.755046187483832e17,0), ',','');
975504618748383200
От друга страна, ROUND()
като числово функция, тя извежда само цифри :
mysql> SELECT ROUND(9.755046187483832e17,0);
975504618748383200
Вижте http://sqlfiddle.com/#!2/d41d8/17614 за игра с това.
РЕДАКТИРАНЕ: Както забелязахте, последните две цифри са закръглени до 00 . Това е заради DOUBLE
граници на прецизност. Трябва да запомните това двойно са приблизителни . Ако имате нужда от точни стойности и/или повече цифри от наличните с 16-битова точност на double, вероятно трябва да промените типа на колоната си на DECIMAL
. По подразбиране DECIMAL
има 10 цифри точност (10 база 10 цифри). Можете изрично да заявите до 65 цифри.
Например, ако имате нужда от точност до 20 цифри, пишете нещо подобно:
CREATE TABLE tbl (myValue DECIMAL(20), ...
Вижте http://dev.mysql.com/ doc/refman/5.6/en/fixed-point-types.html
Моля, имайте предвид обаче, че нещата не толкова просто. Избирането на десетичната колона може безшумно да я преобразува в двойна (или голям ?), като по този начин се губи допълнителната прецизност. Може да се наложи изрично да прехвърляте към низ, за да запазите пълната прецизност. Това означава, че може да се наложи да се справите с това на ниво приложение.
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
Вижте http://sqlfiddle.com/#!2/d5f58/2 за примери.