2012-04-30 115 views
148

我需要將分鐘轉換爲小時,四捨五入爲小數點後兩位。我還需要在小數點後面最多顯示2個數字。所以,如果我有鍾如650.Then小時應該是10.83SQL - 舍入到2位小數

這是我到目前爲止有:

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

但在這種情況下,如果我的分鐘,也就是說,630 - 小時10.5000000。但我只希望它只有10.50(四捨五入後)。我如何實現這一目標?

+2

的數據庫引擎您使用的? –

+0

如果T-SQL,這是一個重複的http://stackoverflow.com/questions/3190688/t-sql-round-to-decimal-places –

回答

267

難道你不能把你的結果作爲numeric(x,2)?凡x <= 38

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

返回

10.500000 10.50 
+4

奇怪。 'SELECT ROUND(630/60.0,2);'已經給我'10.50'。 –

+2

@ u07ch當你已經在使用cast時,使用round()的目的是什麼? – Ram

+8

@Ram問題沒有指定sql服務器引擎 - 這就是爲什麼我突出顯示了自己投下的一輪v。轉換爲數字不會在所有引擎中舍入,因此如果計算的數字是10.809,您將得到10.80而不是10.81所需的問題。 – u07ch

49

與SQL Server 2012中,你可以使用內置的format function

SELECT FORMAT(Minutes/60.0, 'N2') 

(只是爲了進一步閱讀...)

+1

注意這裏介紹數千個分隔符,例如'1,757.47' – 8128

+3

使用'0.00'而不是'N2'給出了兩位小數,並且沒有千位分隔符。 – 8128

+0

它是最終的。 – Sathiyamoorthy

0

以下片段可能會對您有所幫助:

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 
+8

您是否閱讀過接受的答案? –

1

工作在兩個與PostgreSQL和甲骨文

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

可以使用

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

下面的查詢是有用的,簡單 -

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

給出輸出爲0.25。

6
Declare @number float = 35.44987665; 
Select round(@number,2) 
+3

考慮在答案中加入一點解釋。 –

+0

如果是小數點(10,6),會發生什麼情況? –

2
DECLARE @porcentaje FLOAT 

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

SELECT @porcentaje 
0

你面額使用什麼都應該是十進制,例如1548/100會給15.00

如果我們在我們的例子中100.0更換100我們會得到15.48

select 1548/100 
15.00000 

select 1548/100.0 
15.4800 

0 
-1

我發現STR功能是實現這一點最簡潔的方法。

SELECT STR(ceiling(123.415432875), 6, 2) 
0

試試這個:SELECT CAST(ROUND([Amount 1]/60,2) AS DECIMAL(10,2)) as TOTAL