2013-11-26 3 views
1

하나의 쿼리가 있지만 올바른 답을주지 못합니다.이 5 시간 58 분 + 7 시간 58 분 = 13 시간 56 분으로 표시하고 싶습니다. 13.56), 그러나 이것은 결과를 출력하는 13.6을 제공합니다. 다른 해결책을 알려주십시오. (Effort1Effort2Minutes 58 분 열입니다, Effort1Minutes 58 분 칼럼과 같은 Effort2 7 시간 열입니다, 5 시간 열입니다. 당신은 망치가있을 때, 모든 문제가 못처럼 보인다분이 60 분을 초과 할 때 시간과 분의 합

select SUM(Effort1 + Effort2) + SUM(Effort1Minutes + Effort2Minutes)/60 + CONVERT(decimal(18,2), (SUM(Effort1Minutes + Effort2Minutes) % 60)/100.00) 
from TimesheetDetails 

답변

2

. 이것은 일반적이다 기본적으로 의미 함정은, "각각의 주어진 문제에 대한 올바른 도구를 사용하여".

당신이 시간의 합을 계산하는 그런 복잡한 쿼리를 사용하는 이유는 무엇입니까?

  1. 을 왜 두가 없습니다열 나중에 추가 할 수 있습니다 ADDDATE(d1, d2)

  2. SQL 99 표준에 정의 된대로 TIME INTERVAL 데이터 형식을 사용하지 않는 이유는 무엇입니까?

  3. 왜 결과를 몇 분 내에 반환하지 않고 응용 프로그램을 선택한 형식으로 변환하도록 하시겠습니까?

  4. 별도로 시간과 분을 반환하고 분당 합계에서 발생할 수있는 추가 시간을 처리하도록 응용 프로그램을 다시 한 번 떠나지 않는 이유는 무엇입니까?

여러분도 알다시피, 루트에서 문제를 해결하는 다른 많은 솔루션이 있지만 동시에 더 나은 데이터베이스 디자인을 모두 제공합니다. 특히 그들을 최우선 적으로 고려하십시오.

+0

'time' 열을 사용하여 얻을 수는 있지만 여전히 올바른 데이터 유형은 아닙니다. '시간'은 시간 간격이 아닌 시간을 나타 내기위한 것입니다. 그리고 영업 이익이 이러한 가치의 perfoming 추가를 감안할 때, 그것은 그들이 간격이 될 것을 의미합니다. –

+0

형식 의미에 매우 밀착하려는 경우 'Time1Start', 'Time1End' 등을 항상 녹음 할 수 있지만 어쨌든 구체적인 솔루션을 제공하지는 않지만 독자의 개선을위한 생각 만하면됩니다. 데이터베이스 –

+0

예를 들어 문제가 더 중요합니다. '시간'은 24 시간보다 긴 기간을 수용 할 수 없으며, 그 합계는 쉽게 초과 할 수 있습니다. –

관련 문제