SQL-소수점 2 자리로 반올림


222

분을 시간으로 변환하고 소수점 이하 2 자리로 반올림해야하며 소수점 뒤에 최대 2 개의 숫자 만 표시하면됩니다. 그래서 650 분이 있다면 시간은 10.83이어야합니다.

여기까지 내가 가진 것입니다 :

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

그러나이 경우 내 분이 630 인 경우 시간은 10.5000000입니다. 그러나 10.50으로 만 원합니다 (반올림 후). 어떻게하면 되나요?


3
어떤 데이터베이스 엔진을 사용하고 있습니까?
Ja͢ck

답변:


378

결과를 캐스트 할 수 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

8
이상한. 벌써 SELECT ROUND(630/60.0, 2);나에게 준다 10.50.
Ja͢ck

4
@ u07ch 이미 캐스트를 사용할 때 round ()를 사용하는 목적은 무엇입니까?
Ram

16
@Ram이 질문은 SQL Server 엔진을 지정하지 않았으므로 라운드 v 캐스트 자체를 강조 표시 한 이유입니다. 숫자로 변환하면 모든 엔진에서 반올림하지 않으므로 계산 된 숫자가 10.809이면 질문에 필요한 10.81이 아닌 10.80이됩니다.
u07ch

1
@ u07ch 자세한 답변 감사합니다. 그것은 나를 도왔다.
Ram

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

78

SQL Server 2012와 마찬가지로 내장 형식 함수를 사용할 수 있습니다 .

SELECT FORMAT(Minutes/60.0, 'N2')

(추가 정보는 ...)


2
여기에는 수천 개의 구분 1,757.47
기호도

10
'N2'대신 '0.00'을 사용하면 천 단위 구분 기호가없는 소수점 이하 두 자리가 표시됩니다.
8128

2
문자열로 변환하는 것 같습니까? 어떤 순서로 문제를 일으키는 지.
blissweb

2
@blissweb Format 함수의 출력이 아니라 원래 열에서 주문할 수 있으므로 문제가되지 않습니다.
Matten

25

당신이 사용할 수있는

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


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

2
스택 오버플로에 오신 것을 환영합니다! 제한적이고 즉각적인 도움을 줄 수있는 코드 스 니펫에 감사드립니다. 적절한 설명은 왜 이것이 문제에 대한 좋은 해결책인지 설명함으로써 장기적인 가치 를 크게 향상시킬 것이며 , 다른 비슷한 질문을 가진 미래 독자들에게 더 유용 할 것입니다. 가정을 포함하여 설명을 추가하려면 답변을 수정하십시오.
sepehr


3

postgresql과 Oracle 모두에서 작동

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

3

다음 쿼리는 유용하고 간단합니다.

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

출력을 0.25로 제공합니다.


3

이제까지 당신이 소수에 있어야 교단에서 사용하는, 예를 들어 1548/100줄 것이다15.00

우리가 바꿀 경우 100100.0우리의 예에서 우리가 얻을 것이다15.48

select 1548/100 
15.00000

select 1548/100.0
15.4800

0

3

전화 번호를 Numeric또는Decimal .

다음과 같이 쿼리를 바꾸십시오.

SQL Server

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

MySql :

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

Cast함수의 래퍼 Convert함수. SQL을 해석 언어로 사용하면 결과는 두 함수가 동일한 결과를 생성하더라도 함수에서 약간 더 뒤쳐져 있다는 것입니다 Cast. 이 Convert기능을 사용하면 적은 비용을 절약 할 수 있지만 적은 비용으로도 절약 할 수 있습니다.



2

아래 답변에 대한 추가 기능으로 수식에 INT 또는 비소수 데이터 유형을 사용할 때는 값에 1과 원하는 소수 자릿수를 곱해야합니다.

즉 - TotalPackages입니다 INT분모 때문에TotalContainers 이지만, 결과는 소수점 이하 6 자리까지 원합니다.

그러므로:

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

1

다음 스 니펫이 도움이 될 수 있습니다.

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

STR 기능이 이것을 달성하는 가장 깨끗한 수단이라는 것을 알았습니다.

SELECT STR(ceiling(123.415432875), 6, 2)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.