다른 테이블과 조인을 해서 사용을 하고 싶은데요.
기본적으로 특정기간 동안 월, 시작일 종료일 이 있는 데이터가 필요하게 되었습니다.
Table 을 만들어서 넣어 두는 것 보다는 쿼리가 있을 것 같아서 문의 드립니다.
2015-01 ~ 2016-12월 까지 시작일, 종료일을 뽑을 수 있는 쿼리가 있을 까요?
결과 값이
2015-01 | 2015-01-01 | 2015-01-31 |
2015-02 | 2015-02-01 | 2015-02-29 |
2015-03 | 2015-03-01 | 2015-03-31 |
2015-04 | 2015-04-01 | 2015-04-30 |
2015-05 | 2015-05-01 | 2015-05-31 |
2015-06 | 2015-06-01 | 2015-06-30 |
2015-07 | 2015-07-01 | 2015-07-31 |
2015-08 | 2015-08-01 | 2015-08-31 |
2015-09 | 2015-09-01 | 2015-09-30 |
2015-10 | 2015-10-01 | 2015-10-31 |
2015-11 | 2015-11-01 | 2015-11-30 |
2015-12 | 2015-12-01 | 2015-12-31 |
2016-01 | 2016-01-01 | 2016-01-31 |
2016-02 | 2016-02-01 | 2016-02-29 |
2016-03 | 2016-03-01 | 2016-03-31 |
2016-04 | 2016-04-01 | 2016-04-30 |
2016-05 | 2016-05-01 | 2016-05-31 |
2016-06 | 2016-06-01 | 2016-06-30 |
2016-07 | 2016-07-01 | 2016-07-31 |
2016-08 | 2016-08-01 | 2016-08-31 |
2016-09 | 2016-09-01 | 2016-09-30 |
2016-10 | 2016-10-01 | 2016-10-31 |
2016-11 | 2016-11-01 | 2016-11-30 |
2016-12 | 2016-12-01 | 2016-12-31 |
이런 식으로 나오게 하고 싶습니다.
그래서 이것과 운영되고 있는 DB와 조인을 해서 결과 값을 뽑으려 하는데... 가능 할지요?
Comment 3
-
DOOLLY
2016.03.30 10:50
-
처리짱
2016.03.30 11:47
방법이야 많겠지만 아래의 방법도...
--42003 -> 2015-01-01SELECT --DATEADD(MONTH, number, 42003),
LEFT(CONVERT(NVARCHAR(20), DATEADD(MONTH, number, 42003), 121), 7),
LEFT(CONVERT(NVARCHAR(20), DATEADD(MONTH, number, 42003), 121), 10),
LEFT(CONVERT(NVARCHAR(20), DATEADD(MONTH, number + 1, 42003) - 1, 121), 10)
FROM MASTER.DBO.SPT_VALUES WHERE TYPE = 'P' AND NUMBER < 30 -
한태
2016.04.06 16:21
;WITH cte AS(select DATEADD(YEAR, DATEDIFF(YEAR, 0, '2015-01-01'), 0) as MM,DATEADD(DAY, -1, DATEADD(MONTH, 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, '2015-01-01'),0))) as M_endunion allselect DATEADD(MONTH,1,MM),DATEADD(DAY, -1, DATEADD(MONTH, 1, DATEADD(DAY,1,M_end)))from ctewhere MM<'2016-12-01')select CONVERT(varchar(7),MM,121) MM,CONVERT(varchar(10),MM,121) M_start,CONVERT(varchar(10),M_end,121) M_endfrom cteCTE를 이용해서도 한번 해봤습니다.
Select YYMM , min(YYMMDD) as sDate , YYMM +'-'+ convert(varchar(2),count(YYMM)) as eDate from
( SELECT YY+'-'+MM+'-'+DD YYMMDD , YY+'-'+MM YYMM FROM ( SELECT RIGHT('0'+CAST( NUMBER + 2010 AS VARCHAR(4) ),4) YY FROM MASTER.DBO.SPT_VALUES WHERE TYPE = 'P' AND NUMBER < 10 ) YY , ( SELECT RIGHT('0'+CAST( NUMBER + 1 AS VARCHAR(2) ),2) MM FROM MASTER.DBO.SPT_VALUES WHERE TYPE = 'P' AND NUMBER < 12 ) MM , ( SELECT RIGHT('0'+CAST( NUMBER + 1 AS VARCHAR(2) ),2) DD FROM MASTER.DBO.SPT_VALUES WHERE TYPE = 'P' AND NUMBER < 31 ) DD WHERE ISDATE(YY+MM+DD ) = 1 )
A group by YYMM order by YYMM
이렇게 했는데... 맞을까요? 결과값은 나오긴 하는 것 같습니다.