求写一个oracle函数,关于周期 10

输入参数是一个日期返回参数当前年,当前周期,周期开始日期,周期结束日期(周期的计算方式是每年的第一天到第一个周日为第一周,之后的7天为一周[即:周一到周日为一周],每年的... 输入参数是一个日期
返回参数当前年,当前周期,周期开始日期,周期结束日期
(周期的计算方式是每年的第一天到第一个周日为第一周,
之后的7天为一周[即:周一到周日为一周],
每年的最后一个周一到最后一天为最后一周),总共只有12分了。。。没办法多给
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
发财财富来2
2014-10-10 · TA获得超过125个赞
知道答主
回答量:121
采纳率:100%
帮助的人:47万
展开全部
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longrenyingdc8ecb1
2014-10-10 · TA获得超过1万个赞
知道大有可为答主
回答量:6032
采纳率:82%
帮助的人:2353万
展开全部
必须要写函数么,一般我们写的函数都是一个函数一个结果,很少有一个函数几个结果的,虽然oracle
似乎用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
有些地方可能要调整,不过大概的意思是这样的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式