sql >> Database teknologi >  >> RDS >> PostgreSQL

Kan Postgres-datatypen NUMERIC gemme signerede værdier?

Du kan helt sikkert bruge den vilkårlige præcisionstype numeric med en præcision på 5 og en skala på 1, ligesom @Simon kommenterede, men uden syntaksfejlen. Brug et komma(, ) i stedet for prikken (. ) i typemodifikatoren:

SELECT numeric(5,1) '-999.9' AS nr_lower
     , numeric(5,1) '9999.9' AS nr_upper;

 nr_lower | nr_upper
----------+----------
   -999.9 |   9999.9

Minustegnet og prikken i strengen literal tæller ikke med i det tilladte maksimum af signifikante cifre (precision ).
Hvis du ikke behøver at begrænse længden, skal du blot bruge numeric .
Hvis du har brug for at håndhæve minimum og maksimum, skal du tilføje en kontrolbegrænsning:

CHECK (nr_column BETWEEN -999.9 AND 9999.9)

numeric gemmer dit nummer præcis . Hvis du ikke har brug for den absolutte præcision, og små afrundingsfejl er ikke noget problem, kan du også bruge en af ​​flydende kommatyperne double precision (float8 ) eller real (float4 ).

Eller da du kun tillader et enkelt brøkdecimalciffer, kan du gange med 10 og bruge integer , som ville være den mest effektive lagring:4 bytes, ingen afrundingsfejl og hurtigste behandling. Bare brug og dokumenter nummeret korrekt.

Detaljer for numeriske typer i manualen.




  1. MySql-fejl:1364 Feltet 'display_name' har ikke standardværdi

  2. Hvordan skriver man ved hjælp af BCP til en ekstern SQL-server?

  3. Eksempler på sammenkædning af strenge og tal fra Oracle

  4. Top-N-forespørgsler og sideinddeling i Oracle