Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách làm tròn (LÊN / XUỐNG) trong SQL Server - 5 mẹo hữu ích

Chúng ta đã được dạy làm tròn số từ khi còn nhỏ. Khi bạn làm tròn 1,15 đến phần mười gần nhất, nó sẽ là 1,2 hay 1,1? Việc sử dụng hàm ROUND của SQL để trả lời có thể khiến bạn bối rối. Sau này, bạn sẽ hiểu ý tôi.

[sendpulse-form id =”12010 ″]

Đây là một câu hỏi khác. Tổng của 1 + 1 là bao nhiêu? Đó là một câu hỏi khá ngu ngốc. Đây là lần đầu tiên trẻ em học toán, không phải dành cho người lớn như chúng ta. Nhưng hãy xem đoạn mã dưới đây:

-- Variables for input values
DECLARE @value1 DECIMAL(3,2) = 1.05
DECLARE @value2 DECIMAL(3,2) = 1.45
DECLARE @sum1 DECIMAL(3,2) = @value1 + @value2

-- Variables for rounded values
DECLARE @roundedValue1 TINYINT = ROUND(@value1,0)
DECLARE @roundedvalue2 TINYINT = ROUND(@value2,0)
DECLARE @sum2 TINYINT = ROUND(@sum1,0)

-- Surprise!
SELECT 'sum of ' + CAST(@value1 AS VARCHAR(4)) + ' + ' + CAST(@value2 AS VARCHAR(4)) AS Q1,  @sum1 AS Sum1
SELECT 'sum of ' + CAST(@roundedValue1 AS VARCHAR(4)) + ' + ' + CAST(@roundedValue2 AS VARCHAR(4)) AS Q2,  @sum2 AS Sum2

Sau đó, kiểm tra kết quả bên dưới:

Chuyện gì đã xảy ra ở đây? Chúng tôi nhận được hai giá trị với một phần thập phân. Sau đó, chúng tôi làm tròn chúng bằng cách sử dụng SQL ROUND đến số nguyên gần nhất. Tổng của chúng cũng được làm tròn. Nhưng làm thế nào 1 + 1 có thể là 3?!

Một chuyên gia SQL nhạy bén sẽ phát hiện ra vấn đề trong mã ngay lập tức. Nhưng hãy xem xét điều này:

  • Làm tròn 2,5 đến số nguyên gần nhất là 3, không phải 2.
  • Tổng của 1 + 1 là 2.

Thật khó phải không?

Đây là vấn đề. Nếu bạn không cẩn thận, SQL ROUND có thể khiến bạn thất vọng. Đây cũng có thể là một nguồn tranh luận giữa các nhà phát triển và kế toán. Một trong những điều này là khi xử lý nguyên tắc trọng yếu. Các đối số có thể trở nên tồi tệ.

Bạn có thể làm gì?

Hàm Round trong SQL Server

Không, tôi không bảo bạn chuyển vấn đề này cho nhà phát triển tiếp theo. Bài đăng này sẽ cung cấp cho bạn các mẹo tinh túy để làm cho cả bạn và người dùng của bạn hài lòng với kết quả. Một số mẹo này cũng có thể áp dụng để làm tròn một số ở phía front-end của ứng dụng hoặc trong các báo cáo.

Hãy kiểm tra chi tiết 5 mẹo của chúng tôi.

Làm tròn hàm cho số trong SQL

Bạn đã biết cách làm tròn số trong SQL vậy tại sao lại hỏi? Nó không phải là về việc hỏi làm thế nào. Đó là về việc hỏi khi nào. Bạn có thể hỏi những câu hỏi tương tự như sau:

  • Bạn có làm tròn các giá trị đầu vào TRƯỚC KHI thực hiện các phép tính không?
  • Hay bạn tính toán các giá trị đầu vào rồi làm tròn kết quả?

Có thể nảy sinh thêm nhiều câu hỏi tùy thuộc vào các phép tính bạn sẽ thực hiện.

Vấn đề là, cho dù bạn nhận được tiêu chuẩn hoặc mô hình làm tròn từ người dùng. Sau đó, bạn có thể sử dụng mô hình này để viết các truy vấn. Bạn không giả định hoặc đoán điều gì sẽ dẫn đến bất đồng sau này. Và nếu việc đưa tiêu chuẩn này vào một ghi chú ở đâu đó trong báo cáo là hữu ích, hãy thực hiện nó.

Một phần khác của tiêu chuẩn là sử dụng bao nhiêu chữ số thập phân. Điều gì sẽ xảy ra nếu cột của bảng có kiểu dữ liệu là DECIMAL (10,4)? Làm thế nào bạn sẽ làm tròn nó chỉ đến 2 chữ số thập phân?

Hãy thử mã bên dưới:

DECLARE @value DECIMAL(10,4)

SET @value = 8346.1556

-- This will result in 8346.16 instead of 8346.1600
SELECT CAST(ROUND(@value, 2) AS DECIMAL(10,2)) 

CAST sau ROUND sẽ chỉ hiển thị hai chữ số thập phân. Hai số 0 sẽ bị cắt bớt:

Hiểu biết Cách SQL làm tròn đến vị trí thập phân

Ở đây chúng tôi trả lời câu hỏi đầu tiên của chúng tôi. Khi bạn làm tròn 1,15 đến phần mười gần nhất, nó sẽ là 1,2 hay 1,1?

Đầu tiên, bạn kiểm tra nó với kiểu dữ liệu DECIMAL:

DECLARE @value DECIMAL(3,2)

SET @value = 1.15

SELECT @value
SELECT ROUND(@value, 1)  -- This will result in 1.2 or 1.20

Kết quả của đoạn mã trên là 1,20 hoặc 1,2:

Nhưng nếu kiểu dữ liệu là FLOAT thì sao? Hãy thử thay đổi nó.

DECLARE @value FLOAT

SET @value = 1.15

SELECT @value
SELECT ROUND(@value, 1)  -- This will result to 1.1

Kết quả là gì? Đó là 1.1. Hãy xem nó cho chính mình:

Đó không phải là tôi muốn cho bạn thêm nghi ngờ. Tuy nhiên, bạn cần biết rằng các loại dữ liệu này, mặc dù cả hai đều được sử dụng cho số, nhưng không được tạo bằng nhau .

  • FLOAT và REAL là các số gần đúng, không được khuyến nghị để làm tròn - thậm chí không dùng để kiểm tra bình đẳng trong mệnh đề WHERE.
  • DECIMAL và NUMERIC có độ chính xác và tỷ lệ cố định, và chúng tôi gọi chúng là số chính xác. Do đó, khi chúng ta làm tròn 1,15 đến phần mười gần nhất, câu trả lời đúng là 1,2.
  • Số nguyên cũng là số chính xác. Chúng an toàn khi làm tròn các chữ số nguyên.

Vấn đề khó xử bắt đầu từ thiết kế bàn. Bạn có thể muốn làm điều gì đó đối với các cột FLOAT hoặc REAL sẽ được làm tròn ở đâu đó.

3. Sử dụng SQL ROUND trên cùng một nguồn dữ liệu để nhất quán

Giả sử bạn cần tạo một số báo cáo doanh thu để hiển thị các chi tiết khác nhau:tóm tắt, phân tích chi tiết theo loại và phân tích chi tiết theo nguồn. Tất cả ba báo cáo này sẽ coi xu hoặc phần thập phân là phi vật chất. Vì vậy, việc làm tròn giá trị thành số nguyên là không thể tránh khỏi.

Để có kết quả nhất quán trong cả ba báo cáo, hãy áp dụng những điều sau:

  • CHỌN từ các bảng cơ sở giống nhau để đảm bảo rằng tổng số từ các chi tiết phù hợp với bản tóm tắt.
  • Sử dụng cùng một mô hình để làm tròn (điểm # 1 ở trên)

Bạn có muốn hài lòng với người dùng của mình trên các báo cáo doanh thu này không? Nhất quán về địa điểm và cách bạn lấy số của mình.

4. SQL TẦNG hoặc TRẦN VS VÒNG

Có thể có trường hợp bạn phải làm tròn lên hoặc làm tròn xuống số nguyên tiếp theo. Trong trường hợp này, CEILING () hoặc FLOOR () là lựa chọn thích hợp thay vì ROUND ()

CEILING () làm tròn một giá trị thành số nguyên tiếp theo:

SELECT CEILING(1);   -- returns 1 
SELECT CEILING(1.6);  -- returns 2
SELECT CEILING(1.4);  -- returns 2

Trong khi đó, FLOOR () làm tròn xuống:

SELECT FLOOR(1);   -- returns 1 
SELECT FLOOR(2.1); -- returns 2 
SELECT FLOOR(2.9); -- returns 2

5. Kiểm tra kết quả với người dùng của bạn

Sau khi bạn hoàn thành tất cả các truy vấn và thiết kế báo cáo, phần cuối cùng là kiểm tra công việc của bạn với người dùng. Chúng ta có thể mắc sai lầm bất kể chúng ta giỏi như thế nào hoặc chúng ta làm việc chăm chỉ như thế nào. Đôi khi, chúng tôi cần thêm một vài lần lặp lại để làm đúng.

Người dùng của bạn sẽ có các tình huống thử nghiệm đảm bảo tính chính xác của các báo cáo. Hoặc cô ấy có thể có một tệp Excel được thực hiện theo cách thủ công để so sánh công việc của bạn với công việc của họ. Trong mọi trường hợp, hãy làm việc với họ để có một hệ thống tốt hơn. Bạn sẽ rất vui vì bạn đã làm được.

Kết luận

Làm việc với SQL ROUND đôi khi có thể khó khăn. Tuy nhiên, các mẹo được trình bày ở đây chứng minh rằng bạn có thể chiến thắng những trở ngại này. Bạn đã học được gì?

  • Yêu cầu làm tròn tiêu chuẩn hoặc mô hình từ người dùng của bạn.
  • Biết loại dữ liệu bạn đang sử dụng.
  • Sử dụng ROUND trên cùng một nguồn dữ liệu để có tính nhất quán.
  • Đôi khi, FLOOR hoặc CEILING có thể thích hợp hơn ROUND.
  • Cuối cùng, hãy kiểm tra kết quả của bạn với người dùng của bạn.

Bài viết này có hữu ích không? Nếu nó dành cho bạn, những người khác cũng có thể cần nó. Vui lòng chia sẻ bài đăng này trên phương tiện truyền thông xã hội yêu thích của bạn.

Các bài viết liên quan

  1. Tính Tổng số Đang chạy với Mệnh đề OVER và Mệnh đề PARTITION BY trong SQL Server
  2. Tính giá trị trung bình bằng cách sử dụng SQL giao dịch


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khi nguyên tắc DRY không áp dụng:Các hoạt động BITWISE trong SQL Server

  2. Cách bật quyền hàng loạt trong SQL Server

  3. Phát triển máy ảo Azure để sử dụng máy chủ SQL

  4. SQL Server - Cách khóa bảng cho đến khi một quy trình được lưu trữ kết thúc

  5. Tìm kiếm “đối sánh toàn bộ từ” với mẫu LIKE của Máy chủ SQL