oracle 日期 行事曆 PL/SQL

Oracle語法產整年度日期資料

湯菀鈺 2016/12/05 17:15:59
1750







主題

Oracle語法整年度日期資料

文章簡介:

以Oracle直接產出整年份的日期資料供客製化行事曆使用

作者:

湯菀鈺

版本/產出日期

V1.0/2016.12.01




1. 前言


在開發客製化行事曆時會需要自訂行事曆內的每個日期的狀態,所以需要以Oracl語法自動產出1年內每天的日期、星期數、是否為例假日或工作日。。。。等資料



2. 目的


使Oracle 語法,以年份為條件,可自動生該年度的每個日期與各日期的各種狀態



3. Oracle範例


SET SERVEROUTPUT ON

DECLARE

v_date_last DATE;

v_date DATE;

v_day_count INTEGER;

v_year VARCHAR2(8);

v_week VARCHAR2(1);

v_week_nm VARCHAR2(6);

v_type VARCHAR2(1);

v_month_ahead INTEGER;

v_day_ahead INTEGER;

BEGIN

v_year := '2016';

v_date := TO_DATE(v_year||'0101','yyyymmdd');

FOR v_month_ahead IN 1..12

LOOP

v_day_count := to_number( to_char(last_day(trunc(v_date)),'DD'));

FOR v_day_ahead IN 1..v_day_count

LOOP

v_week := TO_CHAR(v_date-1,'D');

v_week_nm := TO_CHAR(v_date,'DAY');

v_type := 'W';

IF v_week >= '6' THEN

v_type := 'H';

END IF;

DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_date,'yyyy/mm/dd')||' '||v_week||' '||v_week_nm||' '||v_type);

v_date := v_date+1;

END LOOP;

END LOOP;

END;

/



4. 取得當日期


TO_CHAR(sysdate,'D'):回傳該日期為該週的第幾天

TO_CHAR(sysdate,'DAY'): 回傳該日期的星期字串



5. 取得當月的總天數


語法:to_number( to_char(last_day(trunc(sysdate)),'DD'));

trunk:使該日期其時分秒都為 00:00:00

last_day: 取得該月份的最後一天日期.

to_char(sysdateDD):取得該日期的日的格式

to_number將數字形態的字串轉換為數字格式



6. FOR LOOP


FOR v_month_ahead IN 1..12

LOOP

    執行的程式…….

END LOOP



v_month_ahead圈的INDEX變數

IN 1..12表示INDEX變數從1~12



7. IF條件式


IF v_week >= '6' THEN

執行的程式…….

END IF;



該星期數大於6時判定為假日



8. 執行結果


 



9. 參考來源


http://www.cnblogs.com/eastjazz/archive/2010/05/24/1742707.html

http://bluemuta38.pixnet.net/blog/post/47443447-oracle-%E9%97%9C%E6%96%BC%E6%97%A5%E6%9C%9F%E6%99%82%E9%96%93

湯菀鈺