2013-05-24 1 views
0

하나의 열에 "14:04:33"과 같은 hr : min : sec 값이있는 데이터베이스가 있습니다. varchar (50). 가장 가까운 5 분 : 14:05:00 및 14:00:00으로 올림/내리고 싶습니다. 둘 다 varchar (50)가되어야합니다. 내가 날짜로 변환하여 반올림을 시도하고 코드는 내가 가장 가까운 5 분까지 반올림하는 데 사용을했다 :hh : mm : ss 값이 varchar 형식 인 경우 가장 가까운 5 분으로 올림/내림

DECLARE @Time varchar (50) 
SELECT @Time ='14:04:33' 
SELECT CAST(CONVERT(datetime,(FLOOR(CAST(CONVERT(datetime,@Time,108)As float)*288)/288), 108)AS varchar (50)) 

최종 출력 오후 2

과 1 월 (1) 1900 그러나 가장 가까운 5 분으로 올림하는 데 사용 된 코드는 다음과 같습니다.

DECLARE @Time varchar (50) 
SELECT @Time ='14:04:33' 
SELECT CAST(CONVERT(datetime,(CEILING(CAST(CONVERT(datetime,@Time,108)As float)*288)/288), 108) AS varchar(50)) 

최종 출력은 Jan 1 1900 2:05 PM입니다. sql server 2012에서 변환에 적합한 함수를 찾고 있습니다.

+0

그래서, [VARCHAR은 (이다 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/뿐만 아니라 12/bad-habits-to-kick-using-the-wrong-data-type.aspx) 그러나 그것이 필요한 것보다 훨씬 큽니다. 최고의 최종 결과는, 나중에 알다시피, 실제 [시간 열] (http://msdn.microsoft.com/en-us/library/bb677243.aspx) –

답변

1

이 시도 :

바닥 값 -

DECLARE @Time varchar (50) 
SELECT @Time ='14:04:33' 
SELECT CONVERT(time,CONVERT(varchar(2),DATEPART(HH,@Time))+':'+CONVERT(varchar(2),(DATEPART(MI,@Time)-DATEPART(MI,@Time)%5))+':00') 

천장을 만들다 값 -

DECLARE @Time varchar (50) 
SELECT @Time ='14:04:33' 
SELECT DATEADD(MI,5,CONVERT(time,CONVERT(varchar(2),DATEPART(HH,@Time))+':'+CONVERT(varchar(2),(DATEPART(MI,@Time)-DATEPART(MI,@Time)%5))+':00')) 
+0

감사합니다,이 제대로 작동하고 있습니다 .... . –

0

당신은 SQL 2012에 있다면, 당신은 새로운 날짜 & 시간 기능을 사용할 수 있습니다 . 이 방법은 가장 가까운 5 분 내림됩니다

DECLARE @When VARCHAR(50) = '14:22:33' 
DECLARE @Time TIME = CAST(@When AS TIME) 

SELECT TIMEFROMPARTS 
(
    DATEPART(HOUR, @Time), --Hour 
    DATEPART(MINUTE, @Time)/5 * 5, --Minute 
    0, --Second 
    0, --Fraction 
    0 --Precision 
) 

http://msdn.microsoft.com/en-us/library/ms186724.aspx