복붙노트

[SQL] T-SQL의 날짜 함수를 사용하여 가장 가까운 분에 가까운 시간을 반올림

SQL

T-SQL의 날짜 함수를 사용하여 가장 가까운 분에 가까운 시간을 반올림

SQL 서버 2008 년, 나는 날짜 열은 2008 년에 바람직 기존의 기능을 가장 가까운 시간 및 분 단위에서 반올림 좀하고 싶습니다.

07 :이 항목 값 2007년 9월 22일 15 38.850 출력과 같을 것이다 :

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

해결법

  1. ==============================

    1.

    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 조랑말이 지적 당신이 아래로 / 반올림하려는 경우, 당신은 각각 반 분 반 시간을 추가 할 수 있습니다, 다음 잘라 :

    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의 추가되기 전에, 나는 단지 날짜를 얻을 수있는 날짜에서 시간 부분을 잘라내는 위의 방법을 사용합니다. 아이디어는 문제의 날짜와 (00.000 : 00 암시 1900-01-01 00 시전 0) 시간에 고정 된 지점 사이의 일 수를 결정하는 것입니다 :

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

    00 : 00.000 그리고 당신에게 00 시간 세트 원래의 날짜를 제공 시간에 고정 된 시점에 일의 해당 번호를 추가 :

    select dateadd(day, @days, 0)
    

    이상 간결 :

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

    다른 날짜 부분 (예를 들어 시간, 마일)를 사용하여 그에 따라 작동합니다.

  2. ==============================

    2.당신의 예에서와 같이 "둥근"아래로. 이 날짜의 VARCHAR 값을 반환합니다.

    당신의 예에서와 같이 "둥근"아래로. 이 날짜의 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
    
  3. ==============================

    3.이 질문은 고대이며 허용 및 대체 응답이 실현. 나는 또한 내 대답은 질문의 절반에 응답 할 것을 깨닫게하지만, 사람이 여전히 가장 가까운 분으로 라운드에 원하는과에 대한 단 하나의 함수를 사용하여 날짜 호환 값이 :

    이 질문은 고대이며 허용 및 대체 응답이 실현. 나는 또한 내 대답은 질문의 절반에 응답 할 것을 깨닫게하지만, 사람이 여전히 가장 가까운 분으로 라운드에 원하는과에 대한 단 하나의 함수를 사용하여 날짜 호환 값이 :

    CAST(YourValueHere as smalldatetime);
    

    시간 초를 들어, 위의 제프 오가타의 대답 (허용 대답)를 사용합니다.

  4. ==============================

    4.선택 변환 (CHAR (8), DATEADD (MINUTE, DATEDIFF (분, 0, GETDATE), 0), (108))를 시간

    선택 변환 (CHAR (8), DATEADD (MINUTE, DATEDIFF (분, 0, GETDATE), 0), (108))를 시간

    00 초 내림 것

  5. from https://stackoverflow.com/questions/6666866/t-sql-datetime-rounded-to-nearest-minute-and-nearest-hours-with-using-functions by cc-by-sa and MIT license