select dd, date_type, date_name, primary_tag from holiday_list
where primary_tag like 'JP%'
and dd between date '2020-01-01' and date '2020-12-31'order by dd;
DD DATE_TYPE DATE_NAME PRIMARY_TAG
---------- ---------- -------------------------- ------------
2020-01-01 10 元日 JP
2020-01-02 -1 年始 JP
2020-01-03 -1 年始 JP
2020-01-13 10 成人の日 JP
2020-01-25 0 プレミアムフライデー JP
2020-02-07 0 ふるさとの日【福井】 JP-18
2020-02-11 10 建国記念の日 JP
2020-02-20 0 県政発足記念日【愛媛】 JP-38
2020-02-23 10 天皇誕生日 JP
2020-02-23 0 富士山の日【静岡】 JP-22
カレンダービューと結合
select c.dd, h.date_name from CALENDAR c
left join HOLIDAY_LIST h on (h.dd = c.dd and h.primary_tag = 'JP')
where c.dd between date '2018-01-01' and date '2018-01-31'order by c.dd;
DD DATE_NAME
---------- --------------------------
2018-01-01 元日
2018-01-02 年始
2018-01-03 年始
2018-01-04
2018-01-05
2018-01-06
2018-01-07
2018-01-08 成人の日
2018-01-09
2018-01-10
2018-01-11
....
selectcount(c.dd) cnt
from CALENDAR c
left join HOLIDAY_LIST h on (h.dd = c.dd and h.primary_tag = 'JP')
where nvl(h.date_type,0) = 0
and c.dd between DATE '2018-09-01' and DATE '2018-09-30'order by c.dd;
CNT
----------
18
2018年の「国民の祝日」「振替休日」「国民の休日」の日数を数える。
selectcount(c.dd) cnt
from CALENDAR c
left join HOLIDAY_LIST h on (h.dd = c.dd and h.primary_tag = 'JP')
where h.date_type > 0 -- データによっては >= 7
and c.dd between DATE '2018-01-01' and DATE '2018-12-31';
CNT
----------
20
複数の休日カレンダーをマージ 優先順位は [JP] [US] [*] の順
selectto_char(dd, 'yyyy-mm-dd(dy)') dy, date_type, date_name, tag
from (
selectrow_number() over (
partition by dd
order bydecode(primary_tag,'JP',1,'US',2,'*',3,4),
date_type desc nulls last
) rn,
dd, date_type, date_name, tag
from holiday_list
where primary_tag in ('*', 'JP', 'US')
and dd between date '2017-01-01' and date '2017-12-31'
)
where rn = 1
order by dd;
DY DATE_TYPE DATE_NAME TAG
---------------- ---------- ------------------------------ --------
2017-01-01(sun) 10 元日 [JP]
2017-01-02(mon) 8 振替休日 [JP]
2017-01-03(tue) -1 年始 [JP]
2017-01-07(sat) 1 [*]
2017-01-08(sun) 1 [*]
2017-01-09(mon) 10 成人の日 [JP]
2017-01-14(sat) 1 [*]
2017-01-15(sun) 1 [*]
2017-01-16(mon) 10 Martin Luther King, Jr., Day [US]
2017-01-21(sat) 1 [*]
2017-01-22(sun) 1 [*]