2010-07-08 2 views
1

누구든지 2 일 간의 종일에 datdiff를받는 방법을 알고 있습니다.SQL 하루 종일 차이

임 currentlly 돌아

datediff(day,createddate,dateserved) 

를 사용하지만, 그것을 필요로 얼마나 많은 전체 일

Created = 1/7/2010 2100 
dateserved = 2/7/2010 2000 

현재 DATEDIFF 1 일 보여줄 것입니다하지만 난 그 때까지 0을 표시해야 일정이 잡힌 패스 2100

모든 아이디어 내가 원래 부서를 사용하려고 제안 된

DATEDIFF(dy, created_date, date_served) - 
CASE 
    WHEN CAST(created_date AS TIME) > CAST(date_served AS TIME) THEN 1 
    ELSE 0 
END 

,하지만 당신은 밀리 초로 내려 할 때 신속하게 산술 오버 플로우를 칠 수 : SP

답변

2

을해야 할 수도 있습니다, 하지만 여기 T-SQL에서 어떻게 할 것인가. 당신은 단지 시간과 관련있는 가정 :

DECLARE 
    @From datetime 
,@Thru datetime 

SET @From = 'Jan 1, 2010 21:00' 
SET @Thru = 'Jan 3, 2010 20:00' -- 2/7/2010 2000 

print datediff(dd, @From, @Thru) 
print datediff(hh, @From, @Thru) 
PRINT datediff(hh, @From, @Thru)/24 

... 즉, (24)에 의해 당신의 날짜 시간, 분열 사이의 시간 차이를 계산하고, 소수점 값을 절단한다. SQL이 잘리는 것처럼 보입니다. 그러나 편집증 환자 인 경우

print datediff(hh, @From, @Thru)/24.0 
PRINT floor(datediff(hh, @From, @Thru)/24.0) 

을 사용하여 올바르게자를 수 있습니다. 분, 초 또는 밀리 초로 정밀도가 필요한 경우 조금 더 arithmatic을 추가하십시오.

+0

감사합니다. Sp – Steven

1

당신은 사용할 수 있습니다.

2

당신이 할 수있는 일은 DATEDIFF() 함수에서 가능한 가장 작은 해상도로 이동하는 것입니다 (분, 초, 뭐든간에). 그런 다음 그것을 수학으로 변환하십시오.

나는 기본적으로 제안 해요 :

Floor(DATEDIFF(mi, createddate, dateserved)/60/24); 
3
SELECT FLOOR(CAST(dateserved AS FLOAT) - CAST(createddate AS FLOAT)) 

또한 다음 작업을 더 간결 보이지만 몇 가지 테스트

@Ian 제이콥스가 처음에 그것을 가지고
SELECT FLOOR(CAST(dateserved-createddate AS FLOAT))