programing

함수를 사용하여 가장 가까운 분과 가장 가까운 시간으로 반올림된 T-SQL 날짜 시간

sourcejob 2023. 5. 29. 10:38
반응형

함수를 사용하여 가장 가까운 분과 가장 가까운 시간으로 반올림된 T-SQL 날짜 시간

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

이 열 값의 경우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 Ponys가 지적했듯이, 반올림/축소하려면 각각 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에 데이터 유형이 추가되기 전에 위의 방법을 사용하여 날짜만 가져오기 위해 날짜 시간에서 시간 부분을 잘라냅니다.이 개념은 해당 날짜 시간과 특정 시점 사이의 일 수를 결정하는 것입니다.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)이 그에 따라 작동합니다.

예와 같이 "반올림"됩니다.날짜의 막대 값을 반환합니다.

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

저는 이 질문이 오래된 것이라는 것을 알고 있고 받아들여지고 대안적인 답이 있다는 것을 알고 있습니다.또한 제 대답은 질문의 절반에 불과하지만, 가장 가까운 시간으로 반올림하고 단일 함수만 사용하여 날짜/시간 호환 값을 유지하고자 하는 사용자에게는 다음과 같습니다.

CAST(YourValueHere as smalldatetime);

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

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

00으로 반올림합니다.

언급URL : https://stackoverflow.com/questions/6666866/t-sql-datetime-rounded-to-nearest-minute-and-nearest-hours-with-using-functions

반응형