Lưu ý về trường có kiểu NUMERIC trong MS SQL Server
NUMERIC là một kiểu dữ liệu (data type) trong hệ quản trị cơ sở dữ liệu MS SQL Server, kiểu dữ liệu này có tính năng lưu trữ các số thập phần có phạm vi từ -10^38 +1 tới 10^38 –1. Trong bài viết này nguyenhuutrong.com sẽ chia sẻ cùng các bạn một số lưu ý khi sử dụng kiểu dữ liệu NUMERIC để lưu thông tin liên quan tới tiền tệ, đặc biệt là tiền tệ của các nước bạn khi thường sử dụng cả dấu , (ngăn cách hàng nghìn) và dấu . (phạm vi số nhỏ nhât, VD: cent với tiền USD $).
Nếu 1 trường trong MS SQL SERVER có định dạng là NUMERIC VD: (15,2), thì điều này có ý nghĩa như sau:
- MS SQL SERVER sẽ lưu 1 số có độ dài = 15 vào Database, độ dài này không tính dấu .
- Người dùng chỉ được phép nhập tối đa 15 – 2 = 13 ký tự trước dấu .
- Người dùng có thể nhập bao nhiêu ký tự sau dấu . thoải mái, MS SQL SERVER sẽ tự động chặt (làm tròn lúc chặt) để giữ lại 2 số sau dấu . VD: 12.0035 –> 12.04
- Nếu người dùng nhập quá 13 ký tự trước dấu chấm, VD: 12345678912345.0500 – 14 ký tự, thì sẽ xuất hiện lỗi sau khi tương tác với Database:
Msg 8115, Level 16, State 8, Line 3
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.
(1 row(s) affected)
Chú ý:
Cách tính này không tính cho số 0, tức là nếu số đã có chiều dài là 15 ký tự trước dấu ., bạn vẫn có thể nhập thêm một cơ số các số 0 trước 15 số này vẫn được.
Với trường hợp số là phần trăm, tức là chỉ được phép nhập tối đa 2 số trước dấu ., thì bạn sẽ căn cứ vào số đằng sau dấu . để quy định chiều dài của số có kiểu NUMERIC. VD: nếu người dùng chỉ được phép nhập tối đã 3 số đằng sau dấu . , (VD: 99,995 %) thì bạn sẽ setting là NUMERIC(5,3) –> người dùng chỉ được phép nhập tối đa 5-3 = 2 số trước dấu .
Trên đây là một số kinh nghiệm khi sử dụng kiểu dữ liệu NUMERIC trong MS SQL Server, hy vọng các điều đó sẽ giúp bạn ít nhiều trong việc sử dụng kiểu NUMERIC đúng cách.
