개발 창고/Database

[MSSQL] 시간/날짜 간격 구하기 DATEDIFF

로이제로 2022. 9. 29. 23:30
반응형

SQL문을 사용하다 보면, 아래와 같은 상황에 직면하곤 합니다.

 

ex)

     1. 일주일 날씨 정보를 알려주세요.

     2. 한 달 과 오늘의 온도 차를 알려주세요.

     3. 1시간 매출과 현재 매출을 비교해 주세요.

 

이 세 가지 예시의 동일한 점은 "OO 전"이라는 점입니다.

이는 시간을 가지고 비교하겠다는 거고, 일단 WHERE에서 일자를 조정할 수 있겠으나

현재 예시를 위해서는 SELECT절에서 처리해 보도록 하겠습니다.

 

  사용방법

SELECT DATEDIFF('구분자', '시작일자', '종료일자')
구분 구분자 약어
year yy, yyyy
분기 quarter qq, q
month mm, m
day dd, d
week wk
시간 hour hh, h
minute mi, n
second ss, s

  사용예시

SELECT DATEDIFF(YEAR    , '2021-09-29', GETDATE())  AS "년"
     , DATEDIFF(QUARTER , '2021-09-29', GETDATE())  AS "분기"
     , DATEDIFF(MONTH   , '2021-09-29', GETDATE())  AS "월"
     , DATEDIFF(DAY     , '2021-09-29', GETDATE())  AS "일"
     , DATEDIFF(WEEK    , '2021-09-29', GETDATE())  AS "주"
     , DATEDIFF(HOUR    , '2021-09-29', GETDATE())  AS "시"
     , DATEDIFF(MINUTE  , '2021-09-29', GETDATE())  AS "분"
     , DATEDIFF(SECOND  , '2021-09-29', GETDATE())  AS "초"
     , GETDATE()                                    AS "현재시간"

현재 2022년 9월 25일 기준으로 위와 같은 결과가 나옵니다. 현재 시각 기준으로 작년 일자를 대입해 보면,

각각 일 년을 기준으로 1년, 4분기, 12개월, 365일, 52주로 결과가 나오는 것을 확인할 수 있습니다.

SELECT DATEDIFF(YY, '2021-09-29', GETDATE())  AS "년"
     , DATEDIFF(QQ, '2021-09-29', GETDATE())  AS "분기"
     , DATEDIFF(MM, '2021-09-29', GETDATE())  AS "월"
     , DATEDIFF(DD, '2021-09-29', GETDATE())  AS "일"
     , DATEDIFF(WK, '2021-09-29', GETDATE())  AS "주"
     , DATEDIFF(HH, '2021-09-29', GETDATE())  AS "시"
     , DATEDIFF(MI, '2021-09-29', GETDATE())  AS "분"
     , DATEDIFF(SS, '2021-09-29', GETDATE())  AS "초"
     , GETDATE()                                    AS "현재시간"

위와 같이 약어를 사용해도 동일한 결과를 추출할 수 있습니다.

 

이를 통해 위의 예시의 결과를 추출한다면

 

1. 일주일  날씨 정보를 알려주세요.

-- COL_WEATHER : 날씨 정보 컬럼
-- TB_WEATHER : 날씨 정보 테이블
-- COL_DATE : 날씨 일자 컬럼
SELECT COL_WEATHER
   FROM TB_WEATHER
  WHERE DATEDIFF(WK, COL_DATE, GETDATE()) = 1

- 주차 기준 1주 차 차이 데이터 조회

 

2. 한 달 과 오늘의 온도 차를 알려주세요.

-- COL_TEMPERATURE : 온도 정보 컬럼
-- TB_WEATHER : 날씨 정보 테이블
-- COL_DATE : 날씨 일자 컬럼
SELECT (SELECT COL_TEMPERATURE FROM TB_WEATHER WHERE DATEDIFF(MM, COL_DATE, GETDATE()) = 1)
     - (SELECT COL_TEMPERATURE FROM TB_WEATHER WHERE DATEDIFF(DD, COL_DATE, GETDATE()) = 0)

- 월 기준 1개월 차이 데이터와 일 기준 0일 차이 데이터의 차이(-)

 

3. 1시간  매출과 현재 매출을 비교해 주세요.

-- COL_AMOUNT : 매출 정보 컬럼
-- TB_SALES : 매출 정보 테이블
-- COL_DATE : 매출 일자 컬럼
SELECT (SELECT SUM(COL_AMOUNT) FROM TB_SALES WHERE DATEDIFF(HH, COL_DATE, GETDATE()) = 1)
     - (SELECT SUM(COL_AMOUNT) FROM TB_SALES WHERE DATEDIFF(HH, COL_DATE, GETDATE()) = 0)

- 시간 기준 1시간 전과 현재 시간 데이터 summary의 차이(-)

반응형