根据年度、月份、周次、星期几,计算出对应的日期

JJR1988112 2012-01-09 04:40:48
根据年度、月份、周次、星期几,计算出对应的日期;
比如 2012年1月份 第二周 星期一 计算出 结果是 2012.1.9
我想问如何用oracle,sql语句,计算出来??
...全文
405 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
raymonshi 2012-01-10
  • 打赏
  • 举报
回复
建议生成一个日期维表。字段有日期、月份、周几
hupeng213 2012-01-10
  • 打赏
  • 举报
回复
--有一个笨办法,先列举出所有日期,然后根据条件进行查询,返回唯一值
--先查询出一月份所有日期,然后过滤
select sDate
from (SELECT to_date('2012-01-01', 'YYYY-MM-DD') + ROWNUM - 1 as sDate
FROM dual
CONNECT BY ROWNUM <= (to_date('2012-01-31', 'YYYY-MM-DD') -
to_date('2012-01-01', 'YYYY-MM-DD') + 1))
--2012.11
where to_char(sDate,'yyyy') = 2012
and to_char(sDate,'mm')= 1
--第2周
and to_char(sDate,'w')=2
--星期一
and to_char(sDate,'d')=2


--结果
1 2012-01-09
iqlife 2012-01-10
  • 打赏
  • 举报
回复
2012年1月份 星期一 这个可以筛选出4个日期
然后根据 第二周 再次筛选即可
JJR1988112 2012-01-10
  • 打赏
  • 举报
回复
问题解决了:
CREATE OR REPLACE FUNCTION get_date2(
/*
*已知 ***某年某月的第n个星期w***,算出具体日期。
*/
y number, --年
m number, --月
idx number, -- 第几个n 周
dow NUMBER -- 星期 m (1 = 星期日, 7=星期六)
)
RETURN DAte
IS
v_date DATE;
v_cnt NUMBER := 0;
BEGIN
IF idx NOT BETWEEN 1 AND 5 THEN RETURN NULL;
END IF;

-- 上个月的最后一天.
v_date := TO_DATE( y || '-' || m, 'YYYY-MM' ) - 1;

WHILE TRUE LOOP
SELECT next_day( v_date , dow )
INTO v_date
FROM dual ;
v_cnt := v_cnt + 1;

IF idx = v_cnt THEN EXIT;
END IF;

END LOOP;

--RETURN to_char(v_date,'DD')*1;
RETURN v_date;
END;
jian_dan_a 2012-01-10
  • 打赏
  • 举报
回复
等高人..
JJR1988112 2012-01-09
  • 打赏
  • 举报
回复
自己顶下,有人啊?

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧