Oracle語法產整年度日期資料
主題: |
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(sysdate,’DD’):取得該日期的日的格式
• 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