SQL - Làm tròn đến 2 chữ số thập phân


222

Tôi cần chuyển đổi phút thành giờ, làm tròn thành 2 chữ số thập phân. Tôi cũng chỉ cần hiển thị tối đa 2 số sau dấu thập phân. Vì vậy, nếu tôi có số phút là 650. Giờ thì nên là 10,83

Đây là những gì tôi có cho đến nay:

Select round(Minutes/60.0,2) from ....

Nhưng trong trường hợp này, nếu số phút của tôi là, giả sử, 630 - giờ là 10,5000000. Nhưng tôi muốn nó chỉ là 10,50 (sau khi làm tròn). Làm thế nào để tôi đạt được điều này?


3
Bạn đang sử dụng công cụ cơ sở dữ liệu nào?
Ja͢ck

1
Nếu là T-SQL, đây là bản sao của stackoverflow.com/questions/3190688/ cấp
Cees Timmerman

Câu trả lời:


378

Bạn có thể không bỏ kết quả của bạn là numeric(x,2)? Ở đâux <= 38

select 
    round(630/60.0,2), 
    cast(round(630/60.0,2) as numeric(36,2))

Trả về

10.500000   10.50

8
Lạ thật. SELECT ROUND(630/60.0, 2);cho tôi 10.50rồi
Ja͢ck

4
@ u07ch mục đích của việc sử dụng round () khi bạn đang sử dụng diễn viên là gì?
Ram

16
@Ram Câu hỏi không chỉ định công cụ máy chủ sql - đó là lý do tại sao tôi tự làm nổi bật vòng v cast. Chuyển đổi thành số không làm tròn trong tất cả các công cụ vì vậy nếu số được tính là 10,809, bạn sẽ nhận được 10,80 thay vì 10,81 câu hỏi bắt buộc.
u07ch

1
@ u07ch Cảm ơn bạn đã trả lời chi tiết. Nó đã giúp đỡ tôi.
Ram

8
cast(630/60.0 as numeric(36,2))là enougth10,50
MrHIDEn

78

Cũng như SQL Server 2012, bạn có thể sử dụng chức năng định dạng tích hợp :

SELECT FORMAT(Minutes/60.0, 'N2')

(chỉ để đọc thêm ...)


2
Lưu ý rằng này giới thiệu hàng ngàn dải phân cách là tốt, ví dụ1,757.47
8128

10
Sử dụng '0,00' thay vì 'N2' cho hai vị trí thập phân mà không có dấu phân cách hàng nghìn.
8128

2
Có vẻ để chuyển đổi thành chuỗi? mà vít lên thứ tự bởi.
blissweb

2
@blissweb Không nên là một vấn đề vì bạn có thể đặt hàng trên cột ban đầu, không phải đầu ra của chức năng Định dạng.
Matten

25

bạn có thể dùng

select cast((630/60.0) as  decimal(16,2))


5
CAST(QuantityLevel AS NUMERIC(18,2))

2
Chào mừng bạn đến với Stack Overflow! Cảm ơn bạn về đoạn mã, có thể cung cấp một số trợ giúp hạn chế, ngay lập tức. Một lời giải thích phù hợp sẽ cải thiện đáng kể giá trị lâu dài của nó bằng cách mô tả lý do tại sao đây là một giải pháp tốt cho vấn đề và sẽ giúp nó hữu ích hơn cho những người đọc tương lai với những câu hỏi tương tự khác. Vui lòng chỉnh sửa câu trả lời của bạn để thêm một số giải thích, bao gồm các giả định bạn đã thực hiện.
sepehr

4
DECLARE @porcentaje FLOAT

SET @porcentaje = (CONVERT(DECIMAL,ABS(8700)) * 100) / CONVERT(DECIMAL,ABS(37020))

SELECT @porcentaje

3

Hoạt động trong cả hai với postgresql và Oracle

SELECT ename, sal, round(((sal * .15 + comm) /12),2) 
FROM emp where job = 'SALESMAN' 

3

Truy vấn sau đây rất hữu ích và đơn giản

declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

Cho đầu ra là 0,25.


3

Những gì bạn từng sử dụng trong mệnh giá nên ở dạng thập phân, ví dụ 1548/100sẽ cho15.00

Nếu chúng ta thay thế 100bằng 100.0trong ví dụ của mình, chúng ta sẽ nhận được15.48

select 1548/100 
15.00000

select 1548/100.0
15.4800

0

3

Chuyển đổi số của bạn thành một NumerichoặcDecimal .

Thay thế truy vấn của bạn bằng cách sau đây.

Máy chủ Sql

Select Convert(Numeric(38, 2), Minutes/60.0) from ....

MySql:

Select Convert(Minutes/60.0, Decimal(65, 2)) from ....

Các Castchức năng là một wrapper cho Convertchức năng. Kết hợp với SQL là một ngôn ngữ được giải thích và kết quả là mặc dù hai hàm tạo ra cùng một kết quả, vẫn có một chút diễn ra đằng sau hậu trường trong Casthàm. Sử dụng Convertchức năng là một khoản tiết kiệm nhỏ, nhưng tiết kiệm nhỏ nhân lên.



2

Là một phần bổ sung cho các câu trả lời dưới đây, khi sử dụng kiểu dữ liệu INT hoặc không thập phân trong công thức của bạn, hãy nhớ nhân giá trị với 1 và số thập phân bạn thích.

tức là - TotalPackageslà một INTmẫu sốTotalContainers , nhưng tôi muốn kết quả của mình có tối đa 6 chữ số thập phân.

do đó:

((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,

1

Đoạn mã sau có thể giúp bạn:

select SUBSTR(ENDDTTM,1, 9), extract(DAY FROM (ENDDTTM)), ENDDTTM, BEGINDTTM,  (ENDDTTM - BEGINDTTM),substr(BEGINDTTM, 1,15), substr((ENDDTTM - BEGINDTTM), 12, 8),
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 3600 + substr((ENDDTTM - BEGINDTTM), 15, 2)*60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)),2) as seconds,
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 60 + substr((ENDDTTM - BEGINDTTM), 15, 2) +  substr((ENDDTTM - BEGINDTTM), 18, 2)/60 ), 2)as minutes,
round((substr((ENDDTTM - BEGINDTTM), 12, 2) + substr((ENDDTTM - BEGINDTTM), 15, 2)/60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)/3600 ),2)  as hours

0

Tôi thấy hàm STR là phương tiện sạch nhất để thực hiện điều này.

SELECT STR(ceiling(123.415432875), 6, 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.