成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle數(shù)據(jù)庫(kù)如何獲取當(dāng)前自然周,當(dāng)前周的起始和結(jié)束日期

瀏覽:163日期:2023-03-12 15:25:35
目錄
  • Oracle獲取當(dāng)前自然周,當(dāng)前周的起始和結(jié)束日期
  • Oracle獲取自然周數(shù)
    • 1. 按天統(tǒng)計(jì)
    • 2. 按自然周統(tǒng)計(jì)
    • 3. 按月統(tǒng)計(jì)
    • 4. 按季統(tǒng)計(jì)
    • 5. 按年統(tǒng)計(jì)
  • 總結(jié)

    Oracle獲取當(dāng)前自然周,當(dāng)前周的起始和結(jié)束日期

    SELECT to_char(sysdate,"iw")   from dual; --本周是第幾個(gè)自然周SELECT to_char(sysdate,"yyyy") into v_sbzq_nf from dual;  -- 當(dāng)前年份SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,"yyyy-MM-dd"),"yyyy-MM-dd"),"IW"),"yyyy-MM-dd")  FROM DUAL;--本周的起始時(shí)間(本周周一日期)SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,"yyyy-MM-dd"),"YYYY-MM-DD"),"IW") + 6,"yyyy-MM-dd") FROM DUAL;--本周的結(jié)束時(shí)間(本周周日日期)

    下面是使用存儲(chǔ)過程向數(shù)據(jù)庫(kù)中插入一條數(shù)據(jù)

    數(shù)據(jù)格式 : 上報(bào)周期 起始時(shí)間 結(jié)束時(shí)間

    xxxx年第xx周 xx.xx xx.xx

    存儲(chǔ)過程如下:

    create or replace procedure PRC_T_SJSB_ZYGYPJG is   v_sbzq_zs varchar2(20);--上報(bào)周期周數(shù)   v_sbzq_nf varchar2(10); --上報(bào)周期年份   v_start varchar2(10);  --起始月份   v_end varchar2(10);  --結(jié)束月份   v_sbzq varchar2(20); --上報(bào)周期begin   SELECT to_char(sysdate,"iw") into  v_sbzq_zs from dual; --本周是第幾個(gè)自然周   SELECT to_char(sysdate,"yyyy") into v_sbzq_nf from dual;   SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,"yyyy-MM-dd"),"yyyy-MM-dd"),"IW"),"yyyy-MM-dd") into v_start  FROM DUAL;--本周的起始時(shí)間(本周周一日期)   SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,"yyyy-MM-dd"),"YYYY-MM-DD"),"IW") + 6,"yyyy-MM-dd") into v_end  FROM DUAL;--本周的結(jié)束時(shí)間(本周周日日期)   v_start:=substr(v_start,6);   v_end :=substr(v_end,6);   v_start :=replace(v_start,"/",".");   v_start :=replace(v_start,"-",".");   v_end :=replace(v_end, "/",".");   v_end :=replace(v_end, "-",".");   v_sbzq :=v_sbzq_nf||"年第"||v_sbzq_zs||"周";   insert into T_SJSB_ZYGYPJG (sbzq,sbzt,startdate,enddate) values(v_sbzq,"0",v_start,v_end);     commit;end PRC_T_SJSB_ZYGYPJG;

    Oracle獲取自然周數(shù)

    在Oracle中,Mysql中以及Hive中,SQL實(shí)現(xiàn)同樣的功能有時(shí)候可能要遵循不同的語法結(jié)構(gòu),尤其在日期操作方面區(qū)別較為明顯。接下來,將Oracle中常用的周期統(tǒng)計(jì)梳理出來。

    1. 按天統(tǒng)計(jì)

    Oracle中通過to_char()函數(shù)來操作日期變量,通過其中的格式參數(shù)配置輸出日期的格式。

    格式參數(shù)值為’yyyymmdd’時(shí),將日期統(tǒng)一轉(zhuǎn)換為yyyymmdd(年月日)的方式輸出。

    select to_char(created_time,"yyyymmdd") as day,count(mobile_no)from tablewhere to_char(created_time,"yyyymmdd") >= 20181201group by to_char(created_time,"yyyymmdd")order by min(created_time) asc

    輸出的結(jié)果如下所示:

    2. 按自然周統(tǒng)計(jì)

    to_char()函數(shù)的格式參數(shù)值為’iw’時(shí),表示按自然周方式輸出日期在全年中的周數(shù)排序值,自然周即日歷上顯示的周排列結(jié)果。

    如果只輸出周數(shù),不便于排查數(shù)據(jù),所以按自然周進(jìn)行聚合時(shí),最好能把該自然周的起始日期或結(jié)束日期顯示出來,使結(jié)果一目了然。

    select to_char(created_time,"iw") as week, min(created_time), count(mobile_no)from tablewhere to_char(created_time,"yyyymmdd") >= 20181201group by to_char(created_time,"iw")order by min(created_time) asc

    結(jié)果如下所示,其中week表示周數(shù)。通過MIN(created_time)可以展示出每個(gè)自然周的起始日期:

    3. 按月統(tǒng)計(jì)

    to_char()函數(shù)的格式參數(shù)值為’yyyymm’時(shí)可輸出格式為yyyymm(年月)的月份統(tǒng)計(jì)結(jié)果。

    select to_char(created_time,"yyyymm") as Month, count(mobile_no)from tablewhere to_char(created_time,"yyyymm") >= 20181201group by to_char(created_time,"yyyymm")

    其結(jié)果如下所示:

    4. 按季統(tǒng)計(jì)

    to_char()的格式參數(shù)值為’q’,可實(shí)現(xiàn)按季度輸出統(tǒng)計(jì)結(jié)果。

    select to_char(created_time,"q") as q,count(mobile_no)from tablewhere to_char(created_time,"yyyymmdd") >= 20180101group by to_char(created_time,"q")order by min(created_time) asc

    其結(jié)果如下所示,Q表示季度。

    5. 按年統(tǒng)計(jì)

    to_char()函數(shù)的參數(shù)值為’yyyy’時(shí)可以實(shí)現(xiàn)按年輸出統(tǒng)計(jì)結(jié)果。

    select to_char(created_time,"yyyy") as y, count(mobile_no)from tablewhere to_char(created_time,"yyyy") >= 2016group by to_char(created_time,"yyyy")order by y asc

    其輸出結(jié)果如下所示:

    總結(jié)

    以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持。

    標(biāo)簽: Oracle