Oracle 如何获取上个月的第一天星期天和最后一个星期天的日期

mengbingqingcui 2010-11-18 08:02:28
本人对oracle不熟悉,因为工作上遇到这个问题,查了一些东西,但是没有解决这个难题。

请Oracle专家门给点建议,先谢谢了。

问题是: Oracle 如何获取上个月的第一天星期天和最后一个星期天的日期
...全文
1756 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
ynynbgmwh 2011-01-03
  • 打赏
  • 举报
回复
select next_day(trunc(add_months(sysdate,-1),'mm')-1,'星期天'),next_day(last_day(trunc(add_months(sysdate,-1),'mm'))-7,'星期天'), from dual;
星期天=sun
tanyiqiang 2010-12-05
  • 打赏
  • 举报
回复
SELECT MIN(First_Day + b.Rn - 1) AS First_Sunday,
MAX(First_Day + b.Rn - 1) AS Last_Sunday
FROM (SELECT Add_Months(Trunc(SYSDATE, 'month'), -1) AS First_Day,
Trunc(Last_Day(Add_Months(SYSDATE, -1))) -
Add_Months(Trunc(SYSDATE, 'month'), -1) + 1 AS Days
FROM Dual) a,
(SELECT Rownum AS Rn FROM Dual CONNECT BY Rownum <= 31) b
WHERE a.Days >= b.Rn
AND To_Char(First_Day + b.Rn - 1, 'd') = 1
tanyiqiang 2010-12-05
  • 打赏
  • 举报
回复
最优化结果:
SELECT Trunc(Last_Day(Add_Months(SYSDATE, -2)), 'd') + 7 上月第一周日,
Trunc(Last_Day(Add_Months(SYSDATE, -1)), 'd') 上月最后周日
FROM Dual
baoxiaofei123 2010-11-30
  • 打赏
  • 举报
回复
好 学习了
mengbingqingcui 2010-11-24
  • 打赏
  • 举报
回复
谢谢,
spool 加路径
执行语句
spool off
这个学到了。

关键是 上个月的第一个星期天,上个月的最后一个星期天 也是变量,这样是不是只有procedure才能实现呢?
心中的彩虹 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 mengbingqingcui 的回复:]
Hi 各位高手,
如果这样:
select * from tbl_test where startdate between to_date(上个月的第一个星期天) and to_date(上个月的最后一个星期天)

然后把结果放到一个.txt的文件中保存起来,是不是需要写一个procedure呢?

不知道各位有没有时间帮忙一下。谢谢!
[/Quote]
spool 加路径
执行语句
spool off
gelyon 2010-11-23
  • 打赏
  • 举报
回复

spool c:\test.txt
select * from tbl_test where startdate between to_date(上个月的第一个星期天) and to_date(上个月的最后一个星期天)
spool off
gelyon 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 mengbingqingcui 的回复:]
Hi 各位高手,
如果这样:
select * from tbl_test where startdate between to_date(上个月的第一个星期天) and to_date(上个月的最后一个星期天)

然后把结果放到一个.txt的文件中保存起来,是不是需要写一个procedure呢?

不知道各位有没有时间帮忙一下。谢谢!
[/Quote]
用SQLPLUS命令 spool就可以了
mengbingqingcui 2010-11-23
  • 打赏
  • 举报
回复
Hi 各位高手,
如果这样:
select * from tbl_test where startdate between to_date(上个月的第一个星期天) and to_date(上个月的最后一个星期天)

然后把结果放到一个.txt的文件中保存起来,是不是需要写一个procedure呢?

不知道各位有没有时间帮忙一下。谢谢!
mengbingqingcui 2010-11-22
  • 打赏
  • 举报
回复
Thanks everyone, I need time to do research for all your solutions.
The result will come soon. I can say I found wkc168's way is the easiest one and the result seem correct by now.
hong1987 2010-11-19
  • 打赏
  • 举报
回复
不错,学习了
ycproc 2010-11-19
  • 打赏
  • 举报
回复
学习
心中的彩虹 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wkc168 的回复:]
引用楼主 mengbingqingcui 的回复:
本人对oracle不熟悉,因为工作上遇到这个问题,查了一些东西,但是没有解决这个难题。

请Oracle专家门给点建议,先谢谢了。

问题是: Oracle 如何获取上个月的第一天星期天和最后一个星期天的日期



SQL code

SQL> select trunc(add_months(sysdate,-1),'mm'……
[/Quote]

上面写成上月第一周的第一天





SQL> select trunc(add_months(sysdate,-1),'mm'),
2 decode(to_char(trunc(add_months(sysdate,-1),'mm'),'d'),1,trunc(add_months(sysdate,-1),'mm'),next_day(trunc(add_months(sysdate,-1),'mm'),1)) "第一个",
3 last_day(add_months(sysdate,-1))-to_char(last_day(add_months(sysdate,-1)),'d')+1 "最后一个"
4 from dual
5 /

TRUNC(ADD_MONTHS(SYSDATE,-1),' 第一个 最后一个
------------------------------ ----------- -----------
2010-10-1 2010-10-3 2010-10-31

SQL>





心中的彩虹 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 mengbingqingcui 的回复:]
本人对oracle不熟悉,因为工作上遇到这个问题,查了一些东西,但是没有解决这个难题。

请Oracle专家门给点建议,先谢谢了。

问题是: Oracle 如何获取上个月的第一天星期天和最后一个星期天的日期
[/Quote]


SQL> select trunc(add_months(sysdate,-1),'mm'),
2 trunc(add_months(sysdate,-1),'mm')-to_char(trunc(add_months(sysdate,-1),'mm'),'d')+1 "第一个",
3 last_day(add_months(sysdate,-1))-to_char(last_day(add_months(sysdate,-1)),'d')+1 "最后一个"
4 from dual
5 /

TRUNC(ADD_MONT 第一个 最后一个
-------------- -------------- --------------
01-10月-10 26-9月 -10 31-10月-10





minitoy 2010-11-19
  • 打赏
  • 举报
回复
先trunc(sysdate,'mm')-1得到上月最后一天,然后减去(该天在本周中天数-1)即可得到上月最后一个周日,
去括号即本月第一天减去上月最后一天在周中的天数,上个月第一天可以用上上月最后一一个周日的日子+7即可..
minitoy 2010-11-19
  • 打赏
  • 举报
回复
SQL> select trunc(add_months(sysdate,-1),'mm')-to_char(trunc(add_months(sysdate,-1),'mm')-1,'d')+7,trunc(sysdate,'mm')-to_char(trunc(sysdate,'mm')-1,'d') from dual;

TRUNC(ADD_MONTHS(SYSDATE,-1),' TRUNC(SYSDATE,'MM')-TO_CHAR(TR
------------------------------ ------------------------------
2010-10-3 2010-10-31

SQL>
gelyon 2010-11-18
  • 打赏
  • 举报
回复

--现在应该可以了吧,呵呵O(∩_∩)O~
select
CASE WHEN To_Char(trunc(add_months(sysdate,-1),'mm'),'d')=1 --判断第一天是否是周日
THEN trunc(add_months(sysdate,-1),'mm')
ELSE
trunc(add_months(sysdate,-1),'mm')+(7-to_char(trunc(add_months(sysdate,-1),'mm'),'d'))+1
END 上个月的第一个星期天,
CASE WHEN To_Char(last_day(add_months(sysdate,-1)),'d')=1 --判断最后一天是否是周日
THEN last_day(add_months(sysdate,-1))
WHEN trunc((last_day(add_months(sysdate,-1))+(7-to_char(last_day(add_months(sysdate,-1)),'d'))+1),'mm')!=trunc(sysdate,'mm')--判断最后一个周日跨月,则取上个星期天
THEN last_day(add_months(sysdate,-1))-to_char(last_day(add_months(sysdate,-1)),'d')+1
ELSE
last_day(add_months(sysdate,-1))+(7-to_char(last_day(add_months(sysdate,-1)),'d'))+1
END 上个月的最后一个星期天
from dual;
gelyon 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yy_mm_dd 的回复:]
引用 9 楼 gelyon 的回复:

SQL code

--最终结果:
select
CASE WHEN To_Char(trunc(add_months(sysdate,-1),'mm'),'d')=1 --判断第一天是否是周日
THEN trunc(add_months(sysdate,-1),'mm')
ELSE
trunc(add_months(sysdate,-1)……
[/Quote]
sorry ,这个忘考虑了,需要再修改我9楼的
gelyon 2010-11-18
  • 打赏
  • 举报
回复
谁帮我测试下我上面的代码 ,我没法测试 应该没错!谢谢
YY_MM_DD 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gelyon 的回复:]

SQL code

--最终结果:
select
CASE WHEN To_Char(trunc(add_months(sysdate,-1),'mm'),'d')=1 --判断第一天是否是周日
THEN trunc(add_months(sysdate,-1),'mm')
ELSE
trunc(add_months(sysdate,-1),'mm'……
[/Quote]
如果最后一个一天所在的周跨月呢?
加载更多回复(10)

17,078

社区成员

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

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