PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Kann der Postgres-Datentyp NUMERIC signierte Werte speichern?

Sie können natürlich den Typ numeric mit beliebiger Genauigkeit verwenden mit einer Genauigkeit von 5 und einer Skalierung von 1, genau wie @Simon kommentiert, aber ohne den Syntaxfehler. Verwenden Sie ein Komma (, ) anstelle des Punktes (. ) im Typmodifikator:

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

Das Minuszeichen und der Punkt im String-Literal werden nicht auf die zulässige Höchstzahl signifikanter Stellen angerechnet (precision ).
Wenn Sie die Länge nicht einschränken müssen, verwenden Sie einfach numeric .
Wenn Sie Minimum und Maximum erzwingen müssen, fügen Sie eine Check-Einschränkung hinzu:

CHECK (nr_column BETWEEN -999.9 AND 9999.9)

numeric speichert Ihre Nummer genau . Wenn Sie die absolute Genauigkeit nicht benötigen und kleine Rundungsfehler kein Problem darstellen, können Sie auch einen der Fließkommatypen double precision verwenden (float8 ) oder real (float4 ).

Da Sie nur eine einzelne Nachkommastelle zulassen, können Sie auch mit 10 multiplizieren und integer verwenden , was die effizienteste Speicherung wäre:4 Bytes, keine Rundungsfehler und schnellste Verarbeitung. Verwenden und dokumentieren Sie einfach die Nummer ordnungsgemäß.

Details zu numerischen Typen im Handbuch.