Oracle日期函式和迴圈總結

2022-05-14 20:25:57 字數 4745 閱讀 9761

一,日期相關的函式

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');--按照每週進行統計

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

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

二,迴圈

編寫迴圈控制結構時,使用者可以使用基本迴圈,while迴圈和for迴圈等三種型別的迴圈語句,下面分別介紹使用這三種迴圈語句的方法。

1.基本迴圈

loop

statement1;

exit [when condition];

end loop;

當使用基本迴圈時,無論是否滿足條件,語句至少會被執行一次,當condition為true時,會退出迴圈,並執行end loop後的相應操作。當編寫基本迴圈時一定要包含exit語句,否則會陷入死迴圈。另外還應該定義迴圈控制變數,並且在迴圈體內修改迴圈控制變數的值。示例:

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迴圈

基本迴圈至少要執行一次迴圈體內的語句,而對於while迴圈來說,只有條件為true時,才會執行迴圈體內的語句。while迴圈以while ...loop開始,以end loop結束。

while condition loop

statement1;

statement2;

end loop;

當condition為true時,執行迴圈體內的語句,而當condition為false或null時,會退出迴圈,並執行end loop後的語句。當使用while迴圈時,應該定義迴圈控制變數,並在迴圈體內改變迴圈控制變數的值。示例:

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迴圈

當使用基本迴圈或while迴圈時,需要定義迴圈控制變數,並且迴圈控制變數不僅可以使用number型別,也可以使用其他資料型別。當使用for迴圈時,oracle會隱含定義迴圈控制變數。

for counter in [reverse] lower_bound. .upper_bound loop

statement1;

statement2;

end loop;

counter是迴圈控制變數,並且該變數由oracle隱含定義,不需要顯式定義。lower_bound和upper_bound分別對應於迴圈控制變數的下界值和上界值,預設情況下,當使用for迴圈時,每次迴圈時迴圈控制變數會自動增1.如果指定reverse選項,那麼每次迴圈時迴圈控制變數會自動減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)

要求寫乙個儲存過程

往這個測試表中插入資料

從2023年1

月1日到2023年1

月17日迴圈插入

v1v2

v2v4(季度)

v5(一年中的第幾周)

v6(星期幾)

v7(是否週六日)

v8(上一月)

v9(本月最後一天)

2023年01月01日

2023年01月02日

2023年01月03日

2023年01月04日

2023年01月05日

2023年01月06日

2023年01月07日

2023年01月08日

最終sql**

1

declare

2 i int :=1;

3begin

4while i <=

select trunc(to_date( '

2008-01-17

', '

yyyy-mm-dd

')-to_date( '

2007-01-01

', '

yyyy-mm-dd

')) from

dual

5loop

6insert

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)

16from

dual

17);

18 i := i +1;

19end

loop;

20end;

Oracle實用日期函式總結

一 天彙總例句 1 昨天的資料彙總 startday to char trunc startday 1 yyyymmdd and startday to char trunc startday 10 yyyymmdd and startday to char trunc startday,mm yy...

Oracle 日期函式和轉換函式

一 日期函式 日期函式用於處理date型別的資料,兩個日期相減返回日期之間相差的天數。日期不允許做加法運算,無意義。常見代表符號 yyyy 年,mm 月,dd 日,hh 小時,mi 分鐘,ss 秒,day 星期 預設情況下日期格式是dd mon yy即12 3月 19 1 sysdate 該函式返回...

ORACLE 日期函式

1.select to char to date 2011 5 1 yyyy mm dd day from dual 返回星期日 select to char to date 2011 5 1 yyyy mm dd day nls date language american from dual 返...