SQL Server 2008에서 두 날짜 간의 시간 (십진수 유형) 차이를 계산해야합니다.
MSDN에서 'CONVERT'를 사용하여 datetime을 십진수로 변환하는 유용한 기술을 찾을 수 없습니다.
아무도 저를 도와 줄 수 있습니까?
업데이트 :
명확하게하려면 분수 부분도 필요합니다 (따라서 십진수 유형). 따라서 9:00에서 10:30까지 1.5를 반환해야합니다.
답변:
DATEDIFF(hour, start_date, end_date)
start_date
과 사이의 시간 경계를 넘은 시간을 알려줍니다 end_date
.
분수 시간이 필요한 경우 DATEDIFF
더 높은 해상도에서 사용 하고 결과를 나눌 수 있습니다.
DATEDIFF(second, start_date, end_date) / 3600.0
에 대한 설명서 DATEDIFF
는 MSDN에서 사용할 수 있습니다.
http://msdn.microsoft.com/en-us/library/ms189794%28SQL.105%29.aspx
datepart
전달 된 값 DATEDIFF
은 출력의 해상도를 제어합니다. 예를 들면 경우 start_date
와 end_date
59초 의해 상이하고 DATEDIFF(MINUTE, start_date, end_date) / 60.0
0을 반환하지만 DATEDIFF(second, start_date, end_date) / 3600.0
0.0163888 (3,600분의 59)을 반환한다.
DATEDIFF
시간보다 높은 해상도 사용 )이 작동합니다. 예를 들어 SELECT DATEDIFF(second, DATEADD(minute, -15, GETUTCDATE()), GETUTCDATE()) / 3600.0
0.250000을 반환합니다.
두 개의 datetime 값을 빼고 24를 곱하면됩니다.
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
테스트 스크립트는 다음과 같습니다.
Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12'
Declare @Dt2 dateTime Set @Dt2 = getdate()
Select Cast((@Dt2 - @Dt1) as Float) * 24.0
이는 모든 날짜 시간이 내부적으로 한 쌍의 정수로 저장되고 첫 번째 정수는 1900 년 1 월 1 일 이후의 일 수이고 두 번째 정수 (시간을 나타냄)는 자정 이후 의 ( 1 ) 틱 수 이기 때문에 작동합니다. (SmallDatetimes의 경우 시간 부분 정수는 자정 이후의 분 수입니다). 값에 대해 수행되는 모든 산술은 시간 부분을 하루의 일부로 사용합니다. 오전 6시 = 0.25, 정오 = 0.5 등 ... 자세한 내용은 여기 MSDN 링크 를 참조하십시오.
따라서 Cast ((@ Dt2-@ Dt1) as Float)는 두 날짜 시간 사이의 총 일수를 제공합니다. 시간으로 변환하려면 24를 곱하십시오. 총 분이 필요한 경우 24 대신 분 단위로 배수 (24 * 60 = 1440) ...
참고 1 : 이것은 dotNet 또는 javaScript 틱과 동일하지 않습니다.이 틱은 약 3.33 밀리 초입니다.
Postgres를 사용하여 DATEDIFF에 문제가 있었지만 성공했습니다.
DATE_PART('day',(delivery_time)::timestamp - (placed_time)::timestamp) * 24 +
DATE_PART('hour',(delivery_time)::timestamp - (placed_time)::timestamp) +
DATE_PART('minute',(delivery_time)::timestamp - (placed_time)::timestamp) / 60
"14.3"과 같은 결과를 얻었습니다.
Declare @date1 datetime
Declare @date2 datetime
Set @date1 = '11/20/2009 11:00:00 AM'
Set @date2 = '11/20/2009 12:00:00 PM'
Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart
결과 = 1.00
DATEDIFF 함수를 찾고있을 것입니다 .
DATEDIFF (datepart, startdate, enddate)
코드는 다음과 같습니다.
DATEDIFF (hh, startdate, enddate)
SELECT DATEDIFF (hh, firstDate, secondDate) FROM tableName WHERE ...