2009年10月06日
[SQL]土日をのぞいた営業日数の取得
こちらを参照させていただきました。
http://www.russ.jp/stepbbs/step.cgi?mode=view&no=20046
----
days = end date - start date + 1
weeks = trunc(days / 7)
remainder = mod(days, 7)
num = day of week(Sun=0, Mon=1...) + remainder
num < 8: holidays = 0 (business day only)
num = 8: holidays = 1
num > 8 holidays = 2
work days = days - weeks*2 - holidays
*開始日が日曜の場合holidaysはかならず1になる、という条件を付け加えないとダメ
----
select b.create_date_time, b.mod_date_time,
trunc(b.mod_date_time)-trunc(b.create_date_time)+1 as days,
trunc((trunc(b.mod_date_time-b.create_date_time)+ 1)/7) as weeks,
sign(
decode(to_char(b.create_date_time, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH'), 'SUN',0,'MON',1, 'TUE', 2, 'WED', 3, 'THU', 4, 'FRI',5, 'SAT', 6)
+
mod((trunc(b.mod_date_time)-trunc(b.create_date_time) + 1),7)
-8)+1 as holidays,
(trunc(trunc(b.mod_date_time-b.create_date_time)+1)
-
(trunc(((trunc(b.mod_date_time) - trunc(b.create_date_time) + 1))/7)*2)
-
sign(
decode(to_char(b.create_date_time, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH'), 'SUN',0,'MON',1, 'TUE', 2, 'WED', 3, 'THU', 4, 'FRI',5, 'SAT', 6)
+
mod((trunc(b.mod_date_time) - trunc(b.create_date_time) + 1),7)
-7)
)
as work_days
from table_name b
http://www.russ.jp/stepbbs/step.cgi?mode=view&no=20046
----
days = end date - start date + 1
weeks = trunc(days / 7)
remainder = mod(days, 7)
num = day of week(Sun=0, Mon=1...) + remainder
num < 8: holidays = 0 (business day only)
num = 8: holidays = 1
num > 8 holidays = 2
work days = days - weeks*2 - holidays
*開始日が日曜の場合holidaysはかならず1になる、という条件を付け加えないとダメ
----
select b.create_date_time, b.mod_date_time,
trunc(b.mod_date_time)-trunc(b.create_date_time)+1 as days,
trunc((trunc(b.mod_date_time-b.create_date_time)+ 1)/7) as weeks,
sign(
decode(to_char(b.create_date_time, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH'), 'SUN',0,'MON',1, 'TUE', 2, 'WED', 3, 'THU', 4, 'FRI',5, 'SAT', 6)
+
mod((trunc(b.mod_date_time)-trunc(b.create_date_time) + 1),7)
-8)+1 as holidays,
(trunc(trunc(b.mod_date_time-b.create_date_time)+1)
-
(trunc(((trunc(b.mod_date_time) - trunc(b.create_date_time) + 1))/7)*2)
-
sign(
decode(to_char(b.create_date_time, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH'), 'SUN',0,'MON',1, 'TUE', 2, 'WED', 3, 'THU', 4, 'FRI',5, 'SAT', 6)
+
mod((trunc(b.mod_date_time) - trunc(b.create_date_time) + 1),7)
-7)
)
as work_days
from table_name b