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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

章鱼哥TuNan&Z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值