2011-05-04 3 views
2

숫자가 정수가 아니고 숫자가 정수인 경우 소수점 이하 2 자리를 갖는 숫자를 얻으려고합니다. 현재는 1숫자가 정수가 아닌 경우 소수점 이하 자릿수를 얻는 방법

+0

- 그들은 무언가를하는 방법을 요구하고 그 대부분의 경우 해서는 안됩니다. 숫자가 분수 구성 요소가있는 숫자 형식으로 저장된 경우 측정 값의 정확성에 대한 암시 적 제한이 있기 때문에 그 식으로 저장됩니다. 적절한 소수 자릿수를 표시하면 값의 정확성에 대한 신호가 보존됩니다. 또한 정수를 생성 한 쿼리와 그렇지 않은 쿼리에 대해이 프로 시저의 결과를 비교하면 추악하고 일관성이 없어 보입니다. – Hammerite

+1

@Hammerite 나는 다른 것을 구걸한다. 지금이 문제를 조사하고 있으며 사용 사례는 구매 시스템의 '금액'열입니다. 예를 들어 5 가지 항목 또는 2.4 미터를 구매할 수 있기를 바랍니다. 아이템을 구입할 때, 소수는 완전히 불필요합니다. –

답변

2

당신은 계수와 케이스를 사용해야합니다으로 나는 다음과 같은 쿼리

SELECT round(SUM(number),2) as Numb FROM table 

을 사용하고 그리고 난 내가 원하는 1.00와 같은 번호를 얻을. 뭔가 같이 :

select 
case (number mod 1 > 0) 
    when true then round(number, 2) 
    else round(number, 0) 
end 
from Numb 

결과 :이 어제 같은 질문을보고는 이러한 질문 착상이 좋지 못한 것을 나에게 파업

select 
case (number mod 1 > 0) 
    when true then round(number, 2) 
    else round(number,0) 
end as num 
from Numb; 

+------+ 
| num | 
+------+ 
| 2 | 
| 1.01 | 
| 5 | 
| 3.01 | 
| 4.25 | 
+------+ 
5 rows in set (0.00 sec) 
+0

는 select가 한 행만 반환하는 경우에만 작동합니다 –

+0

어떻게 그렇게됩니까? 위 쿼리는 Numb의 모든 행을 선택합니다. 나는 약간의 테스트와 다중 행 결과를 수행했다. – sreimer

+0

이 때 'SUM (WorkedHours) mod 2> 0) , 0) End TotalWorkedHours FROM timetrack.work_items INNER JOIN timetrack.time_logs t on w.ID = t.IDWorkItem 그룹 by IDSottocommessa '그리고 나는 [TotalWorkedHours, 46.19,10.00,30.00,25.00,12.00]을 얻습니다. –

관련 문제