求写一个oracle函数,关于周期 10
输入参数是一个日期返回参数当前年,当前周期,周期开始日期,周期结束日期(周期的计算方式是每年的第一天到第一个周日为第一周,之后的7天为一周[即:周一到周日为一周],每年的...
输入参数是一个日期
返回参数当前年,当前周期,周期开始日期,周期结束日期
(周期的计算方式是每年的第一天到第一个周日为第一周,
之后的7天为一周[即:周一到周日为一周],
每年的最后一个周一到最后一天为最后一周),总共只有12分了。。。没办法多给 展开
返回参数当前年,当前周期,周期开始日期,周期结束日期
(周期的计算方式是每年的第一天到第一个周日为第一周,
之后的7天为一周[即:周一到周日为一周],
每年的最后一个周一到最后一天为最后一周),总共只有12分了。。。没办法多给 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
2个回答
展开全部
create or replace function get_week_start_end(v_date in date) return varchar2 is
v_datev_week varchar2(512);
begin
select '你录入的时间为'||v_date||'。'||
'本周的第一天时间为:'||
to_char((trunc(v_date,'yyyy')+to_number(to_char(v_date,'ww'))*7-7),'yyyy-mm-dd')
||'本周期的最后一天为:'||
to_char((trunc(v_date,'yyyy')+to_number(to_char(v_date,'ww'))*7-1),'yyyy-mm-dd')
into v_datev_week from dual;
return(v_datev_week);
end get_week_start_end;
/
--以上是方法
必须传入日期哦(也可以更改一下直接传入字符),测试查询语句
select get_week_start_end(to_date('2014-10-10','yyyy-mm-dd')) from dual;
v_datev_week varchar2(512);
begin
select '你录入的时间为'||v_date||'。'||
'本周的第一天时间为:'||
to_char((trunc(v_date,'yyyy')+to_number(to_char(v_date,'ww'))*7-7),'yyyy-mm-dd')
||'本周期的最后一天为:'||
to_char((trunc(v_date,'yyyy')+to_number(to_char(v_date,'ww'))*7-1),'yyyy-mm-dd')
into v_datev_week from dual;
return(v_datev_week);
end get_week_start_end;
/
--以上是方法
必须传入日期哦(也可以更改一下直接传入字符),测试查询语句
select get_week_start_end(to_date('2014-10-10','yyyy-mm-dd')) from dual;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
必须要写函数么,一般我们写的函数都是一个函数一个结果,很少有一个函数几个结果的,虽然oracle
似乎用out可是实现,但是从来没这么写过,写完了可能需要很多测试才行。而且一个语句可以搞定的为啥非要写函数呢,用next_day,和trunc,以及to_date等,可以组合出来的。只要你的输入格式固定,应该问题不大。
似乎用out可是实现,但是从来没这么写过,写完了可能需要很多测试才行。而且一个语句可以搞定的为啥非要写函数呢,用next_day,和trunc,以及to_date等,可以组合出来的。只要你的输入格式固定,应该问题不大。
追问
那如果改成语句怎么写?
追答
你的字段是字符的,或者是时间格式的,如果是时间格式的,那么在截取年的时候要转换下,如果是字符的,那么首先要看你的日期是什么形式的,然后转换为时间格式的,进行计算。
这里我假设是时间格式的,我用sysdate来做了,格式为yyyy-mm-dd HH24::mi:ss
那么我们写为
select to_char(sysdate,'yyyy') 当前年,trunc((trunc(sysdate+7,'day')-trunc(sysdate,'year')+1)/7)+1 当期周期,(case when to_char(trunc(sysdate,'iw'),'yyyy')=to_char(sysdate,'yyyy') then trunc(sysdate,'iw') else trunc(sysdate,'year') end) 周期开始日期,(case when to_char(trunc(sysdate+7,'day'),yyyy)=to_char(sysdate,'yyyy') then trunc(sysdate+7,'day') else trunc(last_day(sysdate),'dd') end) 周期结束日期 from dual
有些地方可能要调整,不过大概的意思是这样的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询