一,日期相关的函数

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)

);

要求写一个存储过程

往这个测试表中插入数据

从2007年1月1日到2008年1月17日

循环插入

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代码

 declare
i int := 1;
begin
while i <= SELECT TRUNC(TO_DATE( '2008-01-17', 'yyyy-MM-dd')-TO_DATE( '2007-01-01', 'yyyy-MM-dd')) FROM DUAL
loop
insert into est_date
(v1,v2,v3,v4,v5,v6,v7,v8,v9)
(select to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'yyyy-MM-dd'),
to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'yyyy-MM'),
to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'MM'),
to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'q'),
to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'ww'),
to_char(to_date('2007-01-01','yyyy-MM-dd')+i,'d'),
to_char(add_months(to_date('2007-01-01','yyyy-MM-dd')+i,-1),'yyyy-MM-dd'),
last_day(to_date('2007-01-01','yyyy-MM-dd')+i)
from dual
);
i := i + 1;
end loop;
end;

Oracle日期函数和循环总结的更多相关文章

  1. ORACLE 日期函数

    ORACLE 日期函数 SYSDATE  当前的数据库系统时间 ADD_MONTHS(加减指定的月份) MONTHS_BETWEEN(取两个日期之间相隔的月数) LAST_DAY(取指定日期所在月的最 ...

  2. Oracle日期函数

    Oracle日期函数用于对Oracle数据库中的日期及时间进行处理. (1)ADD_MONTHS Oracle日期函数返回一个具有与所提供日期相差月份的日期,函数中给出了未来或以前的月份数.语法如下: ...

  3. oracle日期函数转换真麻烦。。。

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual  --2011 ...

  4. 数据库Oracle日期函数

    SYSDATE 函数:是一个日期函数,它返回当前数据库服务器的日期和时间. 用日期计算: • 从日期加或者减一个数,结果是一个日期值 • 两个日期相减,得到两个日期之间的天数 ,可以加小时到日期上 S ...

  5. oracle日期函数2!

    1.日期时间间隔操作  当前时间减去7分钟的时间 select sysdate,sysdate - interval '7' MINUTE from dual 当前时间减去7小时的时间 ...

  6. oracle日期函数集锦

    oracle 中select TO_CHAR(sysdate,'Mon') from dual; Question:出来是中文的“6月” 我想要英文的怎么办? Answer:select to_cha ...

  7. ORACLE 日期函数[转载]

    一. 常用日期数据格式 .Y或YY或YYY 年的最后一位,两位或三位 SQL> Select to_char(sysdate,'Y') from dual; TO_CHAR(SYSDATE,'Y ...

  8. oracle 日期函数 求年的最后一天、第一天,月的最后一天

    add_months(trunc(to_date('2013','yyyy') ,'yyyy'),12)-1  2013年最后一天 trunc(to_date('2013','yyyy') ,'yyy ...

  9. [转载]ORACLE日期时间函数大全

    ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)           Year:              yy two digits 两位年 ...

随机推荐

  1. WebBench源码分析与心得

    源码:https://github.com/EZLippi/WebBench   关键全局变量: speed 成功次数 failed 失败次数 bytes 接收字节数 benchtime 执行时长(秒 ...

  2. Python成长笔记 - 基础篇 (九)

    创建一个socketserver 至少分以下几步: First, you must create a request handler class by subclassing the BaseRequ ...

  3. AutoLayout - VFL

    其实很早就像整理出一份VFL的总结出来,觉得有很多东西可以写,但是真正去总结的时候发现,VFL也并没有很多东西,其实应该是在布局的过程中直接用VFL语句思考的过程比较难以形成,多数布局问题其实是在实际 ...

  4. UICollectionView(集合视图)以及自定义集合视图

    一.UICollectionView集合视图           其继承自UIScrollView.         UICollectionView类是iOS6新引进的API,用于展示集合视图,布局 ...

  5. HTML5-块元素标签的使用

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. caffe 在window下编译(windows7, cuda8.0,matlab接口编译)

    1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013 (ps:老板说服务器要装windows系统,没办法,又要折腾一番,在VS下编译好像在cuda8. ...

  7. SSIS 错误

    [OLE DB 源 [1]] 错误: SSIS 错误代码 DTS_E_OLEDBERROR.出现 OLE DB 错误.错误代码: 0x80040E14.已获得 OLE DB 记录.源:"Or ...

  8. linux OS install oracle database

    #!/bin/bash#Purpose:Create and config oracle install.#Usage:Log on as the superuser('root') #1.creat ...

  9. Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  10. Android 事件拦截机制一种粗鄙的解释

    对于Android事件拦截机制,相信对于大多数Android初学者是一个抓耳挠腮难于理解的问题.其实理解这个问题并不困难. 首先,你的明白事件拦截机制到底是怎么一回事?这里说的事件拦截机制,指的是对触 ...