:ARG_P1 , :ARG_P2 이렇게 두개를 'YYYY-MM' 형식으로 받아서 달력을 만들려고 하고 있습니다.
한개만 받아서 달력을 출력하는 SQL은 성공했으나 두개를 받아서 두달을 처음과 끝 달로 하여 달력을 출력하는 문제를 해결하지 못하고 있습니다. 어떻게 하는게 좋을까요 고수님들 . SQL은 제가 짤테니 대략적인 아이디어? 정도만 도와주세요 계속 제자리 걸음중이라 부탁드립니다.
Comment 1
-
건우아빠
2020.05.25 12:12
리스트 형택인지 표 형태인지 ?
기존 작성 했던 쿼리를 같이 올려 주시는게 좋을듯 합니다.
달력 테이블을 만들고 이 달력 테이블을 가져오는 방법도 있는데 휴일등 공휴일을 관리 할수 있구요...
;with
#day as
(
select number + 1 day
from master..spt_values
where type = 'P'
and number < 31
) ,
#month as
(
select number + 1 month
from master..spt_values
where type = 'P'
and number < 12
)
,
#year as
(
select number + 1 + 2020 year
from master..spt_values
where type = 'P'
and number < 30
)
-- insert into CalT
select convert(varchar(4) ,year)+ right( '0'+convert(varchar ,month ),2) + right( '0'+convert(varchar ,day ),2) yymmdd
, convert(varchar(4) ,year) yy
, right( '0'+convert(varchar ,month ),2) mm
, right( '0'+convert(varchar ,day ),2) dd
, DATEPART(wk, convert(varchar(4) ,year)+ right( '0'+convert(varchar ,month ),2) + right( '0'+convert(varchar ,day ),2) ) week
, DATEPART(WEEKDAY, convert(varchar(4) ,year)+ right( '0'+convert(varchar ,month ),2) + right( '0'+convert(varchar ,day ),2) ) weekday
, case DATEPART(WEEKDAY, convert(varchar(4) ,year)+ right( '0'+convert(varchar ,month ),2) + right( '0'+convert(varchar ,day ),2) )
when 1 then 'SUN'
when 2 then 'MON'
when 3 then 'TUE'
when 4 then 'WED'
when 5 then 'THU'
when 6 then 'FRI'
when 7 then 'SAT'
end weekeday
, case DATEPART(WEEKDAY, convert(varchar(4) ,year)+ right( '0'+convert(varchar ,month ),2) + right( '0'+convert(varchar ,day ),2) )
when 1 then '일'
when 2 then '월'
when 3 then '화'
when 4 then '수'
when 5 then '목'
when 6 then '금'
when 7 then '토'
end weekhday
, case DATEPART(WEEKDAY, convert(varchar(4) ,year)+ right( '0'+convert(varchar ,month ),2) + right( '0'+convert(varchar ,day ),2) )
when 1 then '1'
when 2 then '0'
when 3 then '0'
when 4 then '0'
when 5 then '0'
when 6 then '0'
when 7 then '1'
end holiday
from #year , #month , #day
where ISDATE( convert(varchar(4) ,year)+ right( '0'+convert(varchar ,month ),2) + right( '0'+convert(varchar ,day ),2) ) = 1
order by year,month,day