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

우리가 바꿀 경우 100에 100.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.