简介:在开发过程中经常会有需要制作报表或数据统计的模块,在这里就记录本人开发过程中使用过制作报表的ORALCE函数。
制作报表几个原则:
所有复杂查询语句都新建一个视图保存
例如:
1.创建一个视图
create or replace view v_period as
SELECT TO_CHAR( SYSDATE ,'YYYY-MM-DD' ) 今天 FROM DUAL
2.查询视图语句
select v.* from V_PERIOD v
制作报表使用的ORACLE语句
一、获取本周和下一个周周一到周五日期和根据日期得到是星期几
1、TO_CHAR 结合 DECODE、TO_NUMBER 函数求得周一到周五日期
/**
* 获取本周一到周日日期
* 提供周一到周日的日期和当前日期是星期几
* 1.TO_CHAR(SYSDATE,'D') :求得当前日期是一周的第几天
* 2.TO_NUMBER( char ) :该函数是将一个字符串所包含的数据转化为NUMBER型数据
* 3.DECODE(value, if1, then1, if2,then2, if3,then3, . . . else ) :在逻辑编程中,经常用到If – Then –Else 进行逻辑判断
* @author LUOXINYU
* @version 1.0, 2013-05-28
*/
SELECT TO_CHAR( SYSDATE ,'YYYY-MM-DD' ) 今天,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 2,'YYYY-MM-DD' ) 星期一,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 3,'YYYY-MM-DD' ) 星期二,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 4,'YYYY-MM-DD' ) 星期三,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 5,'YYYY-MM-DD' ) 星期四,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 6,'YYYY-MM-DD' ) 星期五,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 7,'YYYY-MM-DD' ) 星期六,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 1,'YYYY-MM-DD' ) 星期日,
DECODE(TO_CHAR(SYSDATE,'D'),
'1','星期日',
'2','星期一',
'3','星期二',
'4','星期三',
'5','星期四',
'6','星期五',
'7','星期六') 星期几
FROM DUAL
2、NEXT_DAY 结合 SUBSTR 函数求得下一个周一到周五日期
/**
* 获取下一个周一到周日日期
* 提供下一个周一到周日的日期和当前日期是星期几
* 1.NEXT_DAY : 用于计算x时间后第一个星期y的时间,x 是一个时间,y 是星期一至星期日中的一个。也可能用数字1 - 7代替,但是用数字的时候1是代表的周日2才是代表的周一
* 2.SUBSTR :字符串截取函数,substr(string, start_postion, [lenght])
* @author LUOXINYU
* @version 1.0, 2013-05-28
*/
SELECT TO_CHAR( SYSDATE ,'YYYY-MM-DD' ) 今天,
'星期'||SUBSTR('日一二三四五六',TO_NUMBER(TO_CHAR(SYSDATE,'D')),1) 星期几,
TO_CHAR(NEXT_DAY(sysdate,1),'YYYY-MM-DD') 星期日,
TO_CHAR(NEXT_DAY(sysdate,2),'YYYY-MM-DD') 星期一,
TO_CHAR(NEXT_DAY(sysdate,3),'YYYY-MM-DD') 星期二,
TO_CHAR(NEXT_DAY(sysdate,4),'YYYY-MM-DD') 星期三,
TO_CHAR(NEXT_DAY(sysdate,5),'YYYY-MM-DD') 星期四,
TO_CHAR(NEXT_DAY(sysdate,6),'YYYY-MM-DD') 星期五,
TO_CHAR(NEXT_DAY(sysdate,7),'YYYY-MM-DD') 星期六
FROM DUAL
参考文章: