2015-04-01 41 views
7

PostgreSQL'de, -999.9 - 9999.9 numaralı imzalı değerleri saklamak istiyorum. Bunun için numeric(5.1) kullanabilir miyim?Postgres veri türü NUMERIC deposu kayıtlı değerleri olabilir mi?

Ya da hangi türü kullanmalıyım?

+0

bir Postgresql sayısal hassaslığı anlamlı basamak sayısı ve ölçek gerekli ondalık sayısıdır. 9999.9, 5 hane ve 1 ondalık basamağa sahiptir, bu nedenle, evet, sayısal (5.1) 'Tamam. Detaylar için [belgeler] (http://www.postgresql.org/docs/9.3/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL) konusuna bakın. –

+0

, -999.9 için sayısal (5.1) tamam mı? –

+2

Neden negatif bir değer eklemeyi deniyor ve neler olduğunu görmüyor musunuz? Neyse, sayısal 'sql standardının bir parçasıdır ve evet, imzalandı. –

cevap

7

arbitrary precision type numeric kesinlikle 5 ve 1, just like @Simon commented ölçekli bir sözdizimi hatası olmadan kullanabilirsiniz. yerine tip değiştirici içinde nokta (.) bir virgül (,) kullanın:

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 

eksi işareti ve dizede nokta değişmez anlamlı basamak (precision) izin verilen üst sınır karşı sayılmaz.
Uzunluğu kısıtlamanız gerekmiyorsa, yalnızca numeric kullanın. Numaranızı tam

CHECK (nr_column BETWEEN -999.9 AND 9999.9) 

numeric mağaza: Eğer minimum ve maksimum uygulamak gerekiyorsa
, bir check constraint ekleyin. Mutlak kesinliğe ihtiyacınız yoksa ve küçük yuvarlama hataları sorun değilse, double precision (float8) veya real (float4) kayan nokta türlerinden birini de kullanabilirsiniz.

Veya, yalnızca tek bir kesirli ondalık basamağa izin verdiğinden, 10 ile çarpabilir ve en verimli depolama alanı olan integer'u kullanabilirsiniz: 4 bayt, yuvarlama hataları ve en hızlı işlem. Sadece numarayı doğru şekilde kullanın ve belgeleyin.

Details for numeric types in the manual.

+0

Teşekkürler @Erwin, harika cevap! –