sql >> Database >  >> RDS >> Mysql

Wetenschappelijke notatie MySQL uitschakelen

U zoekt waarschijnlijk naar de FORMAT of ROUND functie:

FORMAT() gebruiken , afhankelijk van uw landinstelling en uw specifieke behoeften, moet u mogelijk de duizend-scheidingsteken . vervangen :

mysql> SELECT FORMAT(9.755046187483832e17,0);
975,504,618,748,383,200

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

Aan de andere kant, ROUND() een numeriek zijn functie, het voert alleen cijfers uit :

mysql> SELECT ROUND(9.755046187483832e17,0);
975504618748383200

Zie http://sqlfiddle.com/#!2/d41d8/17614 om daarmee te spelen.

BEWERKEN: Zoals je hebt opgemerkt, worden de laatste twee cijfers afgerond op 00 . Dat komt door DOUBLE precisie limieten. Je moet onthouden dat dubbel zijn bij benadering . Als u nauwkeurige waarden en/of meer cijfers nodig heeft dan beschikbaar zijn met de 16-bits precisie van dubbel, moet u waarschijnlijk het type van uw kolom wijzigen in DECIMAL . Standaard DECIMAL heeft een precisie van 10 cijfers (10 grondtal 10 cijfers). U kunt expliciet vragen om maximaal 65 cijfers.

Als u bijvoorbeeld een nauwkeurigheid van maximaal 20 cijfers nodig heeft, schrijft u zoiets als:

CREATE TABLE tbl (myValue DECIMAL(20), ...

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

Houd er echter rekening mee dat de dingen niet zijn dat is simpel. Als u de decimale kolom selecteert, wordt deze mogelijk geruisloos omgezet in dubbel (of groot ?) waardoor de extra precisie verloren gaat. Mogelijk moet u expliciet naar string casten om de volledige precisie te behouden. Dat betekent dat je daar misschien mee te maken krijgt op applicatieniveau.

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

Zie http://sqlfiddle.com/#!2/d5f58/2 voor voorbeelden.



  1. Een logging-handler maken om verbinding te maken met Oracle?

  2. Oracle SQL-query:ophalen van de nieuwste waarden per groep op basis van tijd

  3. MySQL-trigger vóór Waarde invoegen Controle

  4. MySQL "NOT IN" query 3 tabellen