日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle日期函数和循环总结

發(fā)布時間:2025/3/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle日期函数和循环总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,日期相關的函數

Select to_char(sysdate,'Q') from dual;--指定日期的季度

Select to_char(sysdate,'MM') from dual;--月份

Select to_char(sysdate,'WW') from dual;--當年第幾周

Select to_char(sysdate,'W') from dual ;--本月第幾周

Select to_char(sysdate,'DD') from dual;--當月第幾天

Select to_char(sysdate,'D') from dual;--周內第幾天

Select to_char(sysdate,'DY') from duaL;--星期幾

Select last_day(sysdate) from dual;--本月最后一天

Select add_months(sysdate,2) from dual;--當前日期d后推n個月?

select months_between(sysdate,to_date('2012-11-12','yyyy-mm-dd'))from dual;--日期f和s間相差月數

SELECT (next_day(sysdate,1)+1) FROM dual;--指定的日期之后的第一個工作日的日期

select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;--上月末天

select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;--上月今天

select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;--上月第一天

select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');--按照每周進行統(tǒng)計

select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');--按照每月進行統(tǒng)計

select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');--按照每季度進行統(tǒng)計

?二,循環(huán)

編寫循環(huán)控制結構時,用戶可以使用基本循環(huán),WHILE循環(huán)和FOR循環(huán)等三種類型的循環(huán)語句,下面分別介紹使用這三種循環(huán)語句的方法。

1.基本循環(huán)

LOOP

???????? statement1;

???????? ......

????????? EXIT [WHEN condition];

END LOOP;

當使用基本循環(huán)時,無論是否滿足條件,語句至少會被執(zhí)行一次,當condition為TRUE時,會退出循環(huán),并執(zhí)行END LOOP后的相應操作。當編寫基本循環(huán)時一定要包含EXIT語句,否則會陷入死循環(huán)。另外還應該定義循環(huán)控制變量,并且在循環(huán)體內修改循環(huán)控制變量的值。示例:

SQL> declare
? 2? i int:=1;
? 3? begin
? 4? loop
? 5? insert into testloop values(i);
? 6? exit when i=10;
? 7? i:=i+1;
? 8? end loop;
? 9? end;
10? /

2.WHILE循環(huán)

基本循環(huán)至少要執(zhí)行一次循環(huán)體內的語句,而對于WHILE循環(huán)來說,只有條件為TRUE時,才會執(zhí)行循環(huán)體內的語句。WHILE循環(huán)以WHILE ...LOOP開始,以END LOOP結束。

WHILE condition LOOP

?????????? statement1;

?????????? statement2;

?????????? .....

END LOOP;

當condition為TRUE時,執(zhí)行循環(huán)體內的語句,而當condition為FALSE或NULL時,會退出循環(huán),并執(zhí)行END LOOP后的語句。當使用WHILE循環(huán)時,應該定義循環(huán)控制變量,并在循環(huán)體內改變循環(huán)控制變量的值。示例:

SQL> declare
? 2? i int:=1;
? 3? begin
? 4? while i<=10 loop
? 5? insert into testloop values(i);
? 6? i:=i+1;
? 7? end loop;
? 8? end;
? 9? /

3.FOR循環(huán)

當使用基本循環(huán)或WHILE循環(huán)時,需要定義循環(huán)控制變量,并且循環(huán)控制變量不僅可以使用NUMBER類型,也可以使用其他數據類型。當使用FOR循環(huán)時,ORACLE會隱含定義循環(huán)控制變量。

FOR counter in [REVERSE] lower_bound. .upper_bound LOOP

???????? statement1;

???????? statement2;

???????? .......

END LOOP;

counter是循環(huán)控制變量,并且該變量由oracle隱含定義,不需要顯式定義。lower_bound和upper_bound分別對應于循環(huán)控制變量的下界值和上界值,默認情況下,當使用FOR循環(huán)時,每次循環(huán)時循環(huán)控制變量會自動增1.如果指定REVERSE選項,那么每次循環(huán)時循環(huán)控制變量會自動減1。示例:

SQL> begin
? 2? for i in reverse 1..10 loop
? 3? insert into testloop values(i);
? 4? end loop;
? 5? end;

三,綜合案例

建一個這樣的表

create?table?test_date

(

??

??v1?varchar2(40),

??v2?varchar2(40),

??v3?varchar2(40),

??v4?varchar2(40),

??v5?varchar2(40),

??v6?varchar2(40),

??v7?varchar2(40),

??v8?varchar2(40),

??v9?varchar2(40)

);

?

要求寫一個存儲過程

往這個測試表中插入數據

200711日到2008117

循環(huán)插入

?

V1

V2

V2

V4(季度)

V5(一年中的第幾周)

V6(星期幾)

V7(是否周六日)

V8(上一月)

V9(本月最后一天)

2007年01月01日

200701

01

1

1

1

0

200612

20070131

2007年01月02日

200701

01

1

1

2

0

200612

20070131

2007年01月03日

200701

01

1

1

3

0

200612

20070131

2007年01月04日

200701

01

1

1

4

0

200612

20070131

2007年01月05日

200701

01

1

1

5

0

200612

20070131

2007年01月06日

200701

01

1

1

6

1

200612

20070131

2007年01月07日

200701

01

1

1

7

1

200612

20070131

2007年01月08日

200701

01

1

2

1

0

200612

20070131

?

?最終sql代碼

1 declare 2 i int := 1; 3 begin 4 while i <= SELECT TRUNC(TO_DATE( '2008-01-17', 'yyyy-MM-dd')-TO_DATE( '2007-01-01', 'yyyy-MM-dd')) FROM DUAL 5 loop 6 insert into est_date 7 (v1,v2,v3,v4,v5,v6,v7,v8,v9) 8 (select to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'yyyy-MM-dd'), 9 to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'yyyy-MM'), 10 to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'MM'), 11 to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'q'), 12 to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'ww'), 13 to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'d'), 14 to_char(add_months(to_date('2007-01-01','yyyy-MM-dd')+i,-1),'yyyy-MM-dd'), 15 last_day(to_date('2007-01-01','yyyy-MM-dd')+i) 16 from dual 17 ); 18 i := i + 1; 19 end loop; 20 end;

?

轉載于:https://www.cnblogs.com/lwy19998273333/p/5549487.html

總結

以上是生活随笔為你收集整理的Oracle日期函数和循环总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。