sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan Postgres-datatypen NUMERIC lagra signerade värden?

Du kan säkert använda den godtyckliga precisionstypen numeric med en precision på 5 och en skala på 1, precis som @Simon kommenterade, men utan syntaxfel. Använd ett kommatecken(, ) istället för punkten (. ) i typmodifieraren:

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

Minustecknet och punkten i strängen räknas inte mot det tillåtna maximala antalet signifikanta siffror (precision ).
Om du inte behöver begränsa längden, använd bara numeric .
Om du behöver tillämpa minimum och maximum, lägg till en kontrollbegränsning:

CHECK (nr_column BETWEEN -999.9 AND 9999.9)

numeric lagrar ditt nummer exakt . Om du inte behöver den absoluta precisionen och små avrundningsfel är inga problem, kan du också använda en av flyttalstyperna double precision (float8 ) eller real (float4 ).

Eller eftersom du bara tillåter en enstaka decimalsiffra, kan du multiplicera med 10 och använda integer , vilket skulle vara den mest effektiva lagringen:4 byte, inga avrundningsfel och snabbast bearbetning. Använd bara och dokumentera numret ordentligt.

Detaljer för numeriska typer i manualen.




  1. Samla schemastatistik med FND_STATS i EBS 11i och R12

  2. Hur man aktiverar tillägg för oci8 (Oracle) i php.ini - PHP Varning:PHP-start:i Okänd på rad 0

  3. Radnummer per grupp i mysql

  4. Lösning för:Lagra uppdatering, infoga eller radera uttalande påverkade ett oväntat antal rader (0)