홈 · 개발 참고자료

개발 참고자료

[MS-SQL] 날짜, 달력관련 쿼리

작성자
관리자
작성일
2021-10-14
조회
7647
분류
기타 DBMS
DECLARE @START_DATE VARCHAR(8) = '20100101'
DECLARE @END_DATE VARCHAR(8) = '20141231'
SELECT
CONVERT(VARCHAR(10), DATEADD(D, NUMBER, @START_DATE), 112) AS [DATE]
, DATEADD(D, NUMBER, @START_DATE) AS [DATE]

, left(CONVERT(VARCHAR(10), DATEADD(D, NUMBER, @START_DATE), 112), 4) year
, substring(CONVERT(VARCHAR(10), DATEADD(D, NUMBER, @START_DATE), 112), 5, 2) mm
, right(CONVERT(VARCHAR(10), DATEADD(D, NUMBER, @START_DATE), 112), 2) dd
, DATEPART(DW, CONVERT(DATETIME, @START_DATE)+ NUMBER) M_PART /*DATE에 해당하는 요일넘버, 1(일요일)~7(토요일)*/
, DATENAME(DW, CONVERT(DATETIME, @START_DATE)+ NUMBER) M_NAME /*DATE에 해당하는 요일명*/
, DATEPART(QUARTER, DATEADD(D, NUMBER, @START_DATE)) AS [QUARTER] -- 분기
, DATEDIFF(WK, @START_DATE, DATEADD(D, NUMBER, @START_DATE)) WK -- 주

FROM MASTER..SPT_VALUES
WHERE TYPE = 'P'
AND number <= DATEDIFF(D, @START_DATE, @END_DATE)

/************************************************************************************/
/************************************************************************************/

/************************************************************************************/

DECLARE @START_DATE VARCHAR(8) = '20190101'
DECLARE @END_DATE VARCHAR(8) = '20211231'
SELECT
CONVERT(VARCHAR(10), DATEADD(D, NUMBER, @START_DATE), 120) AS [DATE]
, DATEPART(DW, CONVERT(DATETIME, @START_DATE)+ NUMBER) M_PART /*DATE에 해당하는 요일넘버, 1(일요일)~7(토요일)*/
, DATENAME(DW, CONVERT(DATETIME, @START_DATE)+ NUMBER) M_NAME /*DATE에 해당하는 요일명*/
, MONTH(DATEADD(D, NUMBER, @START_DATE)) AS [MONTH] -- 월
, DATEPART(QUARTER, DATEADD(D, NUMBER, @START_DATE)) AS [QUARTER] -- 분기
, DATEDIFF(WK, @START_DATE, DATEADD(D, NUMBER, @START_DATE)) WK -- 주
,
(
CASE CONVERT(VARCHAR(8), CONVERT(DATETIME, @START_DATE) + NUMBER - 1, 112)
WHEN CONVERT(VARCHAR(8), GETDATE(), 112) THEN '오늘' ELSE ''
END
) TODAY
FROM MASTER..SPT_VALUES
WHERE TYPE = 'P'
AND number <= DATEDIFF(D, @START_DATE, @END_DATE)