Kiểu dữ liệu Decimal trong SQL Server
Trong hướng dẫn này, bạn sẽ tìm hiểu về kiểu dữ liệu DECIMAL
trong SQL Server và cách sử dụng nó để lưu trữ các giá trị số thập phân.
Tổng quan về kiểu dữ liệu DECIMAL trong SQL Server
Để lưu trữ các số có độ chính xác và tỷ lệ cố định, bạn sử dụng kiểu dữ liệu DECIMAL
.
Sau đây là cú pháp của kiểu dữ liệu DECIMAL
:
DECIMAL(p,s)
Trong cú pháp này:
- p là độ chính xác là tổng số chữ số thập phân tối đa sẽ được lưu trữ, cả ở bên trái và bên phải của dấu thập phân. Độ chính xác có phạm vi từ 1 đến 38. Độ chính xác mặc định là 38.
- s là tỷ lệ là số chữ số thập phân sẽ được lưu trữ ở bên phải của dấu thập phân. Thang đo có phạm vi từ 0 đến p (độ chính xác). Chỉ có thể chỉ định thang đo nếu độ chính xác được chỉ định. Theo mặc định, tỷ lệ bằng không.
Kích thước bộ nhớ tối đa khác nhau, tùy thuộc vào độ chính xác như được minh họa trong bảng sau:
Độ chính xác | Số byte lưu trữ |
---|---|
1 – 9 | 5 |
10-19 | 9 |
20-28 | 13 |
29-38 | 17 |
Và vì NUMERIC
là synonym của DECIMAL
, do đó, bạn có thể sử dụng chúng thay thế cho nhau.
Các khai báo sau là tương đương:
DECIMAL(10,2)
NUMERIC(10,2)
Bởi vì ISO synonym của DECIMAL
là DEC
và DEC(p,s)
, bạn có thể sử dụng một trong hai DECIMAL
hoặc DEC
:
DECIMAL(10,2)
DEC(10,2)
Ví dụ về DECIMAL trong SQL Server
Hãy lấy một ví dụ về việc sử dụng kiểu dữ liệu DECIMAL
và NUMERIC
.
Đầu tiên, hãy tạo một bảng mới bao gồm hai cột: một cột DECIMAL
và một cột NUMERIC
như sau:
CREATE TABLE test.sql_server_decimal (
dec_col DECIMAL (4, 2),
num_col NUMERIC (4, 2)
);
Thứ hai, thêm một hàng mới vào bảng test.sql_server_decimal
:
INSERT INTO test.sql_server_decimal (dec_col, num_col)
VALUES
(10.05, 20.05);
Thứ ba, truy vấn dữ liệu từ bảng:
SELECT
dec_col,
num_col
FROM
test.sql_server_decimal;
Thứ tư, ví dụ sau cố gắng chèn một hàng mới vào bảng với các giá trị vượt quá độ chính xác và tỷ lệ được chỉ định trong định nghĩa cột:
INSERT INTO test.sql_server_decimal (dec_col, num_col)
VALUES
(99.999, 12.345);
SQL Server sẽ thông báo lỗi và dừng câu lệnh:
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated
Trong hướng dẫn này, bạn đã học cách sử dụng kiểu dữ liệu DECIMAL
trong SQL Server để lưu trữ các giá trị số thập phân.