반응형
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의 차이(-)
반응형
'개발 창고 > Database' 카테고리의 다른 글
[MSSQL] 문자열 나누기 - SPLIT (0) | 2022.12.05 |
---|---|
[SQL] 연산자 (0) | 2022.11.13 |
[MySQL] SUBSTRING_INDEX를 이용한 SPLIT하기 (0) | 2022.09.18 |
[MSSQL] Procedure / Function 조회 (0) | 2022.09.14 |
[MSSQL] 특정 문자열의 개수 추출 (0) | 2022.04.07 |