根据年度、月份、周次、星期几,计算出对应的日期;
比如 2012年1月份 第二周 星期一 计算出 结果是 2012.1.9
我想问如何用oracle,sql语句,计算出来??
比如 2012年1月份 第二周 星期一 计算出 结果是 2012.1.9
我想问如何用oracle,sql语句,计算出来??
解决方案 »
- Oracle求触发器写法
- 安装了oracle10g 后 Toad 提示oracle92的oci.dll不存在
- 怎样将ORACLE中的数据转入SQL SERVER,并每天更新?
- 把Oracle转换成SQLServer
- 触发器中调用存储过程?
- ****请教如何将存储过程返回的记录集写入文本文件****
- 菜鸟问题:请大家帮我
- 在oracle中如何实现像sql中top 5 *这个功能?
- 一百分求救,关于oracle的最大连接数。。。
- 求助:如何用oracle编写一个返回多条记录的存储过程,并在asp程序中调用
- ORA-06502: PL/SQL: 数字或值错误
- oracle存储过程:此表达式的类型声明不完整或格式不正确
--先查询出一月份所有日期,然后过滤
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
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;