茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    Oracle數(shù)據(jù)庫日期遍歷功能的實現(xiàn)
    來源:易賢網(wǎng) 閱讀:3649 次 日期:2015-04-21 14:18:53
    溫馨提示:易賢網(wǎng)小編為您整理了“Oracle數(shù)據(jù)庫日期遍歷功能的實現(xiàn)”,方便廣大網(wǎng)友查閱!

    遍歷開始日期到結(jié)束日期的每一天,若有查詢某段日期下有什么業(yè)務(wù)或者事件發(fā)生時,可用到此函數(shù)。

    create or replace type class_date as object

    (

    year varchar2(10),

    month varchar2(10),

    day varchar2(20)

    )--定義所需要的日期類

    -----------------------------------------------------------------------------

    create or replace type table_date is table of class_date--日期類返回table類型

    ------------------------------------------------------------------------------

    create or replace function minusDay(firstDay in varchar2,lastDay in varchar2)

    return table_date pipelined

    as

    firstYear number;

    firstMonth number;

    lastYear number;

    lastMonth number;

    totalDay number;

    totalMonth number;

    currentDay varchar2(40);

    currentYear varchar2(40);

    type tt is record(

    day varchar2(20),

    month varchar2(20),

    year varchar2(20)

    );

    v_date tt;

    begin

    --第一天的日期轉(zhuǎn)換

    select to_number(substr(firstDay,1,4))into firstYear from dual ;

    select to_number(substr(firstDay,6,2)) into firstMonth from dual;

    --第二天的日期轉(zhuǎn)換

    select to_number(substr(lastDay,1,4)) into lastYear from dual;

    select to_number(substr(lastDay,6,2)) into lastMonth from dual;

    --1 第一個日期早于第二個日期

    if to_number(to_date(firstDay,'yyyy-mm-dd')-to_date(lastDay,'yyyy-mm-dd')) <0 then

    dbms_output.put_line('第一個日期早于第二個日期!');

    end if;

    --2 第一個日期晚于第二個日期

    --------相同年份

    if firstYear = lastYear then

    v_date.year := to_char(firstYear);

    --------相同月份

    if firstMonth = lastMonth then

    v_date.month := to_char(firstMonth);

    -- 天數(shù)差

    totalDay := to_number(to_date(lastDay,'yyyy-mm-dd')-to_date(firstDay,'yyyy-mm-dd'));

    if totalDay = 0 then

    v_date.day := firstDay;

    pipe row(class_date(v_date.year,v_date.month,v_date.day));

    elsif totalDay >0 then

    for dayId in to_number(substr(firstDay,9,2))..to_number(substr(lastDay,9,2)) loop

    v_date.day :=to_char(substr(firstDay,1,7)||'-'||to_char(dayId)) ;

    pipe row(class_date(v_date.year,v_date.month,v_date.day));

    dbms_output.put_line( v_date.day);

    end loop;

    end if;

    --------不同月份

    elsif firstMonth < lastMonth then

    ---月份差

    --totalMonth := lastMonth - firstMonth;

    for id in firstMonth..lastMonth-1 loop

    v_date.month := to_char(id);

    --滿月天數(shù)差

    totalDay := to_number(last_day(to_date(firstYear||'-'||to_char(id)||'-'||'01','yyyy-mm-dd'))-to_date(firstYear||'-'||to_char(id)||'-'||'01','yyyy-mm-dd'))+1;

    for dayId in 1..totalDay loop

    v_date.day := substr(firstDay,1,7)||'-'||to_char(dayId) ;

    pipe row(class_date(v_date.year,v_date.month,v_date.day));

    dbms_output.put_line( v_date.day);

    end loop;

    end loop;

    --最后一個月的遍歷

    v_date.month := to_char(lastMonth);

    -- totalDay :=to_date(lastMonth,'yyyy-mm-dd') -to_date(to_char(lastYear)||'-'||to_char(lastMonth)||'-01','yyyy-mm-dd');

    totalDay := to_number(to_date(lastDay,'yyyy-mm-dd')-to_date(substr(lastDay,1,7)||'-01','yyyy-mm-dd'))+1;

    for id in 1..totalDay loop

    v_date.day := substr(lastDay,1,7)||'-'||to_char(id);

    pipe row(class_date(v_date.year,v_date.month,v_date.day));

    dbms_output.put_line( v_date.day);

    end loop;

    end if;

    --------不同年份

    elsif firstYear < lastYear then

    ----------------------------------------------

    --第一個月

    v_date.year := to_char(firstYear);

    v_date.month := substr(firstDay,6,2);

    totalDay :=to_number(substr( to_char(last_day(to_date(firstDay,'yyyy-mm-dd')),'yyyy-mm-dd'),9,2));

    for dayId in to_number(substr(firstDay,9,2)) ..totalDay loop

    v_date.day := to_char(dayId);

    pipe row(class_date(v_date.year,v_date.month,v_date.day));

    end loop;

    ---------------------------------------------------------------

    --中間所有月數(shù)的日期添加

    totalMonth := to_number( months_between(to_date(lastDay,'yyyy-mm-dd'),to_date(firstDay,'yyyy-mm-dd')))-1;

    currentDay := firstDay;

    currentDay := substr(currentDay,1,8)||'01';

    for monthId in 1..totalMonth loop

    --月數(shù)循環(huán)

    currentDay:=

    to_char(add_months(to_date(currentDay,'yyyy-mm-dd'),1),'yyyy-mm-dd') ;

    currentYear := substr(currentDay,1,4);

    v_date.year := to_char(substr(trim(currentDay),1,4));

    v_date.month := to_char(substr(trim(currentDay),6,2));

    --天數(shù)循環(huán)

    totalDay := to_number(last_day(to_date(currentDay,'yyyy-mm-dd'))-to_date(currentYear||'-'||substr(currentDay,6,2)||'-01','yyyy-mm-dd'))+1;

    for dayId in 1 .. totalDay loop

    v_date.day := to_char(dayId);

    pipe row(class_date(v_date.year,v_date.month,v_date.day));

    dbms_output.put_line( v_date.day);

    end loop;

    end loop;

    -----------------------------------------------------------------------------------

    --最后一個月

    totalDay := to_number(substr(lastDay,9,2));

    v_date.month := to_number(substr(lastDay,6,2));

    for dayId in 1 .. totalDay loop

    v_date.day := to_char(dayId);

    pipe row(class_date(v_date.year,v_date.month,v_date.day));

    end loop;

    end if;

    end minusDay;

    更多信息請查看IT技術(shù)專欄

    更多信息請查看數(shù)據(jù)庫
    易賢網(wǎng)手機網(wǎng)站地址:Oracle數(shù)據(jù)庫日期遍歷功能的實現(xiàn)
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇剩?/div>

    2026國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)