2012-04-30 63 views
148

Potrzebuję przeliczać minuty na godziny, zaokrąglane do 2 miejsc po przecinku. Muszę również wyświetlać tylko do 2 cyfr po przecinku dziesiętnym. Więc jeśli mam minut jak 650.Then godzin powinna być 10,83SQL - zaokrąglanie do 2 miejsc po przecinku

Oto co mam do tej pory:

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

Ale w tym przypadku, jeśli moi minut jest, powiedzmy, 630 - godzina jest +10,5000000. Ale chcę go mieć tylko 10,50 (po zaokrągleniu). Jak to osiągnąć?

+2

Który silnik bazy danych używasz? –

+0

Jeśli jest to T-SQL, jest to duplikat http://stackoverflow.com/questions/3190688/t-sql-round-to-decimal-places –

Odpowiedz

267

Nie możesz rzucić wyników jako numeric(x,2)? Gdzie x <= 38

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

Zwraca

10.500000 10.50 
+4

Dziwne. 'WYBIERZ OKRĄGŁY (630/60,0, 2);' daje mi '10.50' już. –

+2

@ u07ch jaki jest cel używania round(), gdy już używasz rzutowania? – Ram

+8

@Ram Pytanie nie określało mechanizmu serwera sql - dlatego właśnie podświetliłem rundę v. Przelicznik na liczbowy nie zaokrągla we wszystkich silnikach, więc jeśli obliczona liczba to 10,809, otrzymasz 10,80 zamiast 10,81 pytania wymaganego. – u07ch

49

Jak w SQL Server 2012, można użyć wbudowanego format function:

SELECT FORMAT(Minutes/60.0, 'N2') 

(tylko do dalszych lektur ...)

+1

Należy zauważyć, że to wprowadza również separatory tysięcy, np '1,757,47' – 8128

+3

Użycie '0.00' zamiast" N2 "daje dwa miejsca dziesiętne bez separatora tysięcy. – 8128

+0

jest ostateczny. – Sathiyamoorthy

0

Poniższy fragment może pomóc:

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

Czy przeczytałeś zaakceptowaną odpowiedź? –

1

działa zarówno z PostgreSQL i Oracle

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

można użyć

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

następujące zapytanie jest przydatna i POJEDYNCZY

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

Daje wyjście jako 0,25.

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

Zastanów się nad dodaniem odrobiny wyjaśnienia do swojej odpowiedzi. –

+0

Co się stanie w przypadku dziesiętnej (10,6)? –

2
DECLARE @porcentaje FLOAT 

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

SELECT @porcentaje 
0

Co kiedykolwiek użyć w nominałach powinny być w systemie dziesiętnym, na przykład 1548/100 da 15.00

Jeśli zastąpimy 100 z 100.0 w naszym przykładzie będziemy dostać 15.48

select 1548/100 
15.00000 

select 1548/100.0 
15.4800 

0 
-1

Uważam, że funkcja STR jest najczystszym środkiem do osiągnięcia tego.

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

spróbuj tego: SELECT CAST(ROUND([Amount 1]/60,2) AS DECIMAL(10,2)) as TOTAL

Powiązane problemy