Làm cách nào để lưu trữ giá trị thập phân trong SQL Server?


272

Tôi đang cố gắng tìm ra kiểu dữ liệu thập phân của một cột trong Máy chủ SQL. Tôi cần có thể lưu trữ các giá trị như 15,5, 26,9, 24,7, 9,8, v.v.

Tôi đã gán decimal(18, 0)cho kiểu dữ liệu cột nhưng điều này không cho phép tôi lưu trữ các giá trị này.

Cách đúng đắn để làm điều này là gì?

Câu trả lời:


513

DECIMAL(18,0) sẽ cho phép 0 chữ số sau dấu thập phân.

Sử dụng một cái gì đó như DECIMAL(18,4)thay vào đó nên làm tốt!

Điều đó cung cấp cho bạn tổng cộng 18 chữ số , 4 trong số đó sau dấu thập phân (và 14 trước dấu thập phân).


@marc_s, Có cách nào để lưu trữ giá trị "4,5" trong đó kiểu dữ liệu cột là số thập phân (4.2) không? Khi tôi chèn giá trị, nó sẽ được sửa đổi thành "4.50"
Arun

1
@ArunkumarTK: decimal(4,2)cho phép 2 chữ số trước và 2 chữ số sau dấu thập phân. "4.5" có thể được lưu trữ không có vấn đề gì - và về mặt số lượng, "4.5" và "4.50" là giống hệt nhau
marc_s

3
@ArunkumarTK: TẠI SAO những người đó nên khác nhau ?? Cả hai đều là "bốn rưỡi" - giá trị LÀ CÙNG . Và KHÔNG được sử dụng varcharđể lưu trữ giá trị thập phân !!
marc_s

1
Tôi biết đây là một cuộc thảo luận cũ nhưng sẽ không phải là '4.05' và '4.5' trong trường hợp đó @ArunkumarTK.
Shelby115

2
Vâng, tại sao 18 lại phổ biến (ví dụ: mặc định (18,0)) khi cả 18 và 19 sử dụng 9 byte ?
xr280xr

136

Bạn nên sử dụng như sau:

DECIMAL(m,a)

m là tổng số chữ số mà số thập phân của bạn có thể có.

a là số chữ số tối đa bạn có thể có sau dấu thập phân.

http://www.tsqltutorials.com/datatypes.php có các mô tả cho tất cả các kiểu dữ liệu.


3
Nó thường được ký hiệu là DECIMAL (p, s) trong đó p là viết tắt của độ chính xác (chữ số tối đa được phép trong một số) và s là viết tắt của thang đo (chữ số tối đa được phép sau dấu thập phân).
RBT

Liên kết đã chết
ibrahim mahrir

43

Các cài đặt cho Decimalđộ chính xác và tỷ lệ của nó hoặc theo ngôn ngữ bình thường, một số có thể có bao nhiêu chữ số và bạn muốn có bao nhiêu chữ số ở bên phải dấu thập phân.

Vì vậy, nếu bạn đưa PIvào một Decimal(18,0)nó sẽ được ghi lại như 3?

Nếu bạn đặt PIvào một Decimal(18,2)nó sẽ được ghi là 3.14?

Nếu bạn đưa PIvào Decimal(18,10)được ghi là 3.1415926535.


35

Trong hầu hết thời gian, tôi sử dụng số thập phân (9,2) chiếm ít bộ nhớ nhất (5 byte) trong loại thập phân sql.


Chính xác => byte lưu trữ

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

Nó có thể lưu trữ từ 0 đến 9 999 999,99 (trước 7 chữ số + 2 chữ số sau dấu thập phân = tổng 9 chữ số), đủ lớn cho hầu hết các giá trị.


9

Bạn có thể thử cái này

decimal(18,1)

Độ dài của các số phải hoàn toàn 18. Độ dài của các số sau dấu thập phân chỉ là 1 và không nhiều hơn số đó.


6

Trong MySQL DB decimal(4,2)cho phép chỉ nhập tổng cộng 4 chữ số. Như bạn thấy decimal(4,2), điều đó có nghĩa là bạn có thể nhập tổng cộng 4 chữ số trong đó hai chữ số có nghĩa là giữ sau dấu thập phân.

Vì vậy, nếu bạn nhập 100.0 vào cơ sở dữ liệu MySQL, nó sẽ hiển thị một lỗi như "Giá trị ngoài phạm vi cho cột".

Vì vậy, bạn chỉ có thể nhập trong phạm vi này: từ 00.00 đến 99.99.


2
Tại sao điều này có liên quan trong khi câu hỏi được chỉ định rõ ràng Microsoft SQL Server?
JCKödel

3

Các câu trả lời khác là đúng. Giả sử ví dụ của bạn phản ánh đầy đủ các khả năng những gì bạn muốn là DECIMAL(3, 1). Hoặc, DECIMAL(14, 1)sẽ cho phép tổng cộng 14 chữ số. Đó là công việc của bạn để suy nghĩ về những gì đủ.


1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.