[sql] 함수를 사용하여 가장 가까운 분 및 가장 가까운 시간으로 반올림 된 T-SQL datetime

SQL Server 2008에서는 2008의 기존 함수를 사용하여 날짜 시간 열을 가장 가까운 시간과 가장 가까운 분으로 반올림하고 싶습니다.

이 열 값 2007-09-22 15:07:38.850의 경우 출력은 다음과 같습니다.

2007-09-22 15:08 -- nearest minute
2007-09-22 15    -- nearest hour



답변

declare @dt datetime

set @dt = '09-22-2007 15:07:38.850'

select dateadd(mi, datediff(mi, 0, @dt), 0)
select dateadd(hour, datediff(hour, 0, @dt), 0)

돌아올 것이다

2007-09-22 15:07:00.000
2007-09-22 15:00:00.000

위는 초와 분을 잘라서 질문에서 요청한 결과를 생성합니다. @OMG Ponies가 지적했듯이 반올림 / 내림하려면 각각 30 분 또는 30 분을 더한 다음자를 수 있습니다.

select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)

그리고 당신은 얻을 것이다 :

2007-09-22 15:08:00.000
2007-09-22 15:00:00.000

SQL Server 2008에 날짜 데이터 형식이 추가 되기 전에는 위의 방법을 사용하여 datetime에서 시간 부분을 잘라서 날짜 만 가져 왔습니다. 아이디어는 문제의 datetime과 고정 된 시점 ( 0, 암시 적으로 캐스트 1900-01-01 00:00:00.000) 사이의 일 수를 결정하는 것입니다 .

declare @days int
set @days = datediff(day, 0, @dt)

그런 다음 해당 일 수를 고정 시점에 추가하면 시간이 다음과 같이 설정된 원래 날짜가 제공됩니다 00:00:00.000.

select dateadd(day, @days, 0)

또는 더 간결하게 :

select dateadd(day, datediff(day, 0, @dt), 0)

다른 날짜 부분 (예 : hour, mi)을 사용하면 그에 따라 작동합니다.


답변

귀하의 예에서와 같이 “반올림”합니다. 이것은 날짜의 varchar 값을 반환합니다.

DECLARE @date As DateTime2
SET @date = '2007-09-22 15:07:38.850'

SELECT CONVERT(VARCHAR(16), @date, 120) --2007-09-22 15:07
SELECT CONVERT(VARCHAR(13), @date, 120) --2007-09-22 15


답변

나는이 질문이 오래된 것이고 받아 들여지고 또 다른 대답이 있다는 것을 알고 있습니다. 나는 또한 내 대답이 질문의 절반에 대해서만 답할 것이라는 것을 알고 있지만 가장 가까운 분으로 반올림하고 여전히 단일 함수 만 사용하는 datetime 호환 값을 갖고 싶은 사람에게는 다음 같습니다.

CAST(YourValueHere as smalldatetime);

몇 시간 또는 몇 초 동안 위의 Jeff Ogata의 답변 (허용 된 답변)을 사용합니다.


답변

Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time

초를 00으로 내림합니다.


답변