일단 휴일 관리하는 테이블이 별도로 있습니다.
select
(select
dt_wk --영업일
from h_calendar
where dt_cal = '20161122') -
(select
dt_wk --영업일
from h_calendar
where dt_cal = '20161101') 영업일,
(select
dt_wk --영업일
from h_calendar
where dt_cal = '20161130') -
(select
dt_wk --영업일
from h_calendar
where dt_cal = '20161101') 당월영업총일,
(select
dt_wk --영업일
from h_calendar
where dt_cal = '20161130') -
(select
dt_wk --영업일
from h_calendar
where dt_cal = '20161122') 남은영업일
from dual;
이렇게 하면 되기는 하나 이걸로 다시 계산이 들어가야 하는데 그러면 너무 지저분해져서 함수로 처리 하고 싶습니다.
H_CALENDAR 이 테이블이 휴일테이블인데
dt_cal 해당 컬럼은 일자가 들어가는 필드이고(yyyyMMdd)이런식으로
dt_wk 해당 컬럼은 워킹데이가 1 2 3 이런식으로 들어가고 있습니다 그리고 휴일일경우에는 1 2 3 3 이런식으로 워킹데이가 증가하지 않습니다.
fg_cal 해당 컬럼이 H가 오게 되면 휴일로 되어 dt_wk값이 증가 하지 않습니다.
select dt_cal,dt_ac_wk,fg_cal
from h_calendar
where fg_cal not in ('h')
이렇게 하면 휴일없이 나오는데...
고수님들의 조언부탁드립니다.
1. 함수 등록 스크립트
---
CREATE function [dbo].[f_wk_date] (@as_ymd char(8),@as_gubn char(1))
Returns Integer
As
--@as_gubn 값 정의
--'1' = 해당월의 1일부터 해당일 까지의 영업일 계산
--'2' = 해당월의 총영업일 계산
--'3' = 해당월의 해당일부터 해당월말까지의 영업일 계산
Begin
Declare @li_date integer
IF @as_gubn = '1'
Begin
--'1' = 해당월의 1일부터 해당일 까지의 영업일 계산
Select @li_date =
(
Select
dt_wk --영업일
From h_calendar
Where dt_cal = @as_ymd
)
-
(
Select
dt_wk --영업일
From h_calendar
Where dt_cal = LEFT(@as_ymd,6)+'01'
)
From dual;
End
ELSE IF @as_gubn = '2'
Begin
--'2' = 해당월의 총영업일 계산
Select @li_date =
(
Select
dt_wk --영업일
From h_calendar
Where dt_cal = convert(char(8),dateadd(day,-1,Left(Convert(char(8),dateadd(month,1,@as_ymd),112),6) +'01'),112)
)
-
(
Select
dt_wk --영업일
From h_calendar
Where dt_cal = LEFT(@as_ymd,6)+'01'
)
From dual;
End
ELSE IF @as_gubn = '3'
Begin
--'3' = 해당월의 해당일부터 해당월말까지의 영업일 계산
Select @li_date =
(
Select
dt_wk --영업일
From h_calendar
Where dt_cal = convert(char(8),dateadd(day,-1,Left(Convert(char(8),dateadd(month,1,@as_ymd),112),6) +'01'),112)
)
-
(
Select
dt_wk --영업일
From h_calendar
Where dt_cal = @as_ymd
)
From dual;
End
Return @li_date
End
GO
---