Trong PostgreSQL, tôi muốn lưu trữ các giá trị đã ký -999.9
- 9999.9
. Tôi có thể sử dụng numeric(5.1)
cho mục đích này không?Có thể loại dữ liệu Postgres NUMERIC lưu trữ các giá trị đã ký không?
Hoặc tôi nên sử dụng loại nào?
Trong PostgreSQL, tôi muốn lưu trữ các giá trị đã ký -999.9
- 9999.9
. Tôi có thể sử dụng numeric(5.1)
cho mục đích này không?Có thể loại dữ liệu Postgres NUMERIC lưu trữ các giá trị đã ký không?
Hoặc tôi nên sử dụng loại nào?
Bạn chắc chắn có thể sử dụng arbitrary precision type numeric
với độ chính xác là 5 và tỷ lệ 1, just like @Simon commented nhưng không có lỗi cú pháp. Sử dụng một dấu phẩy (,
) thay cho dấu chấm (.
) trong modifier loại:
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
Các dấu trừ và dấu chấm trong chuỗi chữ không được tính vào tối đa cho phép của chữ số có nghĩa (precision
).
Nếu bạn không cần giới hạn độ dài, chỉ cần sử dụng numeric
.
Nếu bạn cần để thực thi tối thiểu và tối đa, thêm một check constraint:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
cửa hàng số điện thoại chính xác. Nếu bạn không cần độ chính xác tuyệt đối và lỗi làm tròn nhỏ không có vấn đề gì, bạn cũng có thể sử dụng một trong các loại dấu phẩy động double precision
(float8
) hoặc real
(float4
). Hoặc, vì bạn chỉ cho phép một chữ số thập phân phân số, bạn có thể nhân với 10 và sử dụng integer
, đây sẽ là bộ nhớ hiệu quả nhất: 4 byte, không làm tròn lỗi và xử lý nhanh nhất. Chỉ cần sử dụng và ghi lại số lượng đúng cách.
Cảm ơn @Erwin, câu trả lời tuyệt vời! –
Độ chính xác của một số postgresql là tổng số chữ số có nghĩa, và quy mô là số chữ số thập phân cần thiết. 9999.9 có 5 chữ số và 1 chữ số thập phân, vì vậy có, 'số (5.1)' sẽ là OK. Xem [tài liệu] (http://www.postgresql.org/docs/9.3/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL) để biết chi tiết. –
là số (5.1) OK cho -999.9? –
Tại sao bạn không thử và chèn một giá trị âm và xem điều gì sẽ xảy ra? Dù sao, 'số' là một phần của tiêu chuẩn sql, và có, nó đã được ký. –