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');--按照每周进行统计

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)

);

 

要求写一个存储过程

往这个测试表中插入数据

200711日到2008117

循环插入

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 提供了丰富的函数和存储过程来支持数据库的开发和应用。 函数是一段可以接收参数并返回一个值的代码块,可以在 SQL 查询中使用。以下是几个常用的 Oracle 函数: 1. 字符串函数:如 CONCAT、SUBSTR、UPPER、LOWER 等用于处理字符串的函数。 2. 数值函数:如 ROUND、TRUNC、ABS、MOD 等用于处理数值数据的函数。 3. 日期函数:如 SYSDATE、TO_CHAR、TO_DATE、MONTHS_BETWEEN 等用于处理日期和时间的函数。 4. 转换函数:如 TO_NUMBER、TO_CHAR、TO_DATE 等用于不同数据类型之间的转换。 存储过程是一系列预定义的 SQL 语句和逻辑操作,可以作为一个单元来执行,并且可以接收输入参数和返回输出参数。存储过程可以用于数据库操作和业务逻辑的封装和重复使用。以下是几个与存储过程相关的概念: 1. 存储过程的创建和调用:使用 CREATE PROCEDURE 语句创建存储过程,在调用时可以传递参数。 2. 输入参数和输出参数:存储过程可以定义输入参数和输出参数,输入参数用于传递值给存储过程,输出参数用于返回结果给调用者。 3. 条件处理:存储过程可以使用条件语句(如 IF、CASE)和循环语句(如 LOOP、FOR)进行条件处理和循环操作。 4. 异常处理:存储过程可以捕获并处理异常,使用 EXCEPTION 和 RAISE 语句来处理异常情况。 通过学习和使用 Oracle函数和存储过程,你可以更加灵活和高效地处理数据库操作和业务逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值