Oracle 中常见的日期变量;

Oracle 中常见的日期变量;

 --定义变量
 v_start_date varchar2(8);--开始日期(当日)
 v_end_date varchar2(8);--结束日期
 v_week_start_date varchar2(8);--当周开始日期
 v_tenday_start_date varchar2(8);--当旬开始日期
 v_month_start_date varchar2(8);--当月开始日期
 v_season_start_date varchar2(8);--当季开始日期
 v_year_start_date varchar2(8);--当年开始日期
 v_lst_mon_start_date varchar2(8);--上月开始日期
 v_lst_mon_end_date varchar2(8);--上月结束日期
 v_lstyear_mon_start_date varchar2(8);--去年同比月开始日期
 v_lst_season_start_date varchar2(8);--上季开始日期
 v_lst_season_end_date varchar2(8);--上季结束日期
 v_lstyear_season_start_date varchar2(8);--去年同比季开始日期
 v_lstyear_start_date varchar2(8);--去年开始日期
 v_lstyear_end_date varchar2(8);--去年结束日期
 season_day integer;--季天数
 year_day integer;--年天数
 --变量赋值
 --当日
 v_start_date := to_char(to_date(p_date , 'yyyyMMdd') , 'yyyyMMdd');
 v_end_date := to_char(to_date(v_start_date , 'yyyyMMdd') +1 , 'yyyyMMdd');
 v_week_start_date := to_char(trunc(to_date(v_start_date , 'yyyyMMdd'),'iW'),'yyyyMMdd');
 --判断为什么旬 当日期为 【1,10】 第一旬 (10,20】 第二旬 (20,31】第三旬
 IF cast(substr(v_start_date,7,2) as INT) >= 1 AND cast(substr(v_start_date,7,2) as INT) <= 10
 then
   v_tenday_start_date := to_char(trunc(to_date(v_start_date , 'yyyyMMdd'),'MM'),'yyyyMMdd');
 ELSIF cast(substr(v_start_date,7,2) as INT) > 10 AND cast(substr(v_start_date,7,2) as INT) <= 20 THEN
   v_tenday_start_date := to_char(trunc(to_date(v_start_date , 'yyyyMMdd'),'MM') + 10,'yyyyMMdd');
 ELSE
   v_tenday_start_date := to_char(trunc(to_date(v_start_date , 'yyyyMMdd'),'MM') + 20,'yyyyMMdd');
 END IF;
 v_month_start_date := to_char(trunc(to_date(v_start_date , 'yyyyMMdd'),'MM'),'yyyyMMdd');
 v_season_start_date := to_char(trunc(to_date(v_start_date , 'yyyyMMdd'),'Q'),'yyyyMMdd');
 v_year_start_date := to_char(trunc(to_date(v_start_date , 'yyyyMMdd'),'yyyy'),'yyyyMMdd');
 v_lst_mon_start_date := to_char(add_months(to_date(v_month_start_date , 'yyyyMMdd'),-1),'yyyyMMdd');
 v_lst_mon_end_date := to_char(add_months(to_date(v_end_date , 'yyyyMMdd'),-1),'yyyyMMdd');
 --v_lst_mon_end_date :=to_char((to_date(v_month_start_date,'yyyyMMdd'),-1),'yyyyMMdd');
 ​

这些变量一般在聚合的时候如:

--当日累计、当周累计、当旬累计、当月累计、当季累计、当年累计、昨日累计、上周当天、上月当天、去年今日累计、上月累计、去年同月累计、上季累计、去年同季累计、去年累计的时候会用到。

 --在oracle中trunc函数有两种用法
 --1.第一种是对数字进行截取语法:trunc(num,[int]);   它的使用是去掉数字num小数位以后的部分,并且不进行四舍五入。
 >select trunc(123.456) from dual;
 trunc(123.456)
 ----------------------
 123
 --2.如果trunc函数带有两个参数,它的使用是保留int位小数,并且对小位数也不进行四舍五入运算。
 >select trunc(123.456,2) from dual;
 trunc(123.456,2)
 123.45
 --3、有一点要注意的是int参数可以使用负数,它的使用是从小数点的左侧开始截取,并把截取的位数替换成0.
 >select trunc(123.456,-2) from dual;
 trunc(123.456,-2)
 --------------------
 100
 --4.trunc函数的第二种用法是对日期进行提取,返回当前日期的第一天。可以是年、月、星期的第一天。
 Oracle trunc()函数的用法
 /**************日期********************/
 1.select trunc(sysdate) from dual  --2011-3-18  今天的日期为2011-3-18
 2.select trunc(sysdate, 'mm')   from   dual  --2011-3-1    返回当月第一天.
 3.select trunc(sysdate,'yy') from dual  --2011-1-1       返回当年第一天
 4.select trunc(sysdate,'dd') from dual  --2011-3-18    返回当前年月日
 5.select trunc(sysdate,'yyyy') from dual  --2011-1-1   返回当年第一天
 6.select trunc(sysdate,'d') from dual  --2011-3-13 (星期天)返回当前星期的第一天
 7.select trunc(sysdate, 'hh') from dual   --2011-3-18 14:00:00   当前时间为14:41   
 8.select trunc(sysdate, 'mi') from dual  --2011-3-18 14:41:00   TRUNC()函数没有秒的精确
 --5.trunc在对日期进行处理的时候,只能对日期进行提取不能是数字或者字符
 >select trunc(to_date('2015-05-08','yyyy-mm-dd'),'yyyy') from dual;
 trunc(to_date('2015-05-08','yyyy-mm-dd'),'yyyy')
 --------------
 2015/01/01 00:00:00
 >select trunc('2015-05-08','yyyy') from dual;
 error at line 1:
 ORA-01722:invalid number
 ​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章鱼哥TuNan&Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值