比如 我给一个周数 32 返回这周的第一天 和最后一天
解决方案 »
- TNS-12541: TNS: 无监听程序,问题很奇怪,tnsping 127.0.0.1没问题
- oracle中sys创建的用户既可以用normal也可以用sysdba登录,是怎么回事
- ORACLE数据库文件丢失恢复工具
- oracle触发器 调用一个JAVA程序。如何将这个JAVA程序用到的多个(N个)外部JAR引入到Oracle里面
- 如何把有重复的数据只插入一次到另一张表中
- flashback关闭后flash_recovery_area\ORACLE\ARCHIVELOG中每天还有日志文件产生,如何删除这些日志并不让其再产生?
- oracle 崩溃 ,如何恢复 急,在线
- 请问Oracle中有没有把一个字符型转换成整型的函数呀 ?
- linux 下oracle8.1.7的安装
- 如何将oracle中的数据导入到SQL中?最好详细地说一下
- oracle高手指点,谢谢!
- 急!问个sql语句问题,多谢
转载了别人的。。
select to_week_by_year(to_date('2010-1-1', 'yyyy-MM-dd'))
from bak_member
where rownum = 1 //输出:1 select to_week_by_year(to_date('2010-1-3', 'yyyy-MM-dd'))
from bak_member
where rownum = 1 //输出:1 select to_week_by_year(to_date('2010-1-4', 'yyyy-MM-dd'))
from bak_member
where rownum = 2 //输出:1 函数如下:
create or replace function to_week_by_year(sdate in date) return number is
Result number;
begin
select to_char(decode(sign((to_date(to_char(sdate, 'yyyymmdd'),
'yyyymmdd') +
to_number(decode(to_char(trunc(to_date(to_char(sdate,
'yyyymmdd'),
'yyyymmdd'),
'yyyy'),
'd'),
'1',
'8',
to_char(trunc(to_date(to_char(sdate,
'yyyymmdd'),
'yyyymmdd'),
'yyyy'),
'd'))) - 2) -
last_day(to_date(to_char(sdate, 'yyyymmdd'),
'yyyymmdd'))),
1,
last_day(to_date(to_char(sdate, 'yyyymmdd'),
'yyyymmdd')),
(to_date(to_char(sdate, 'yyyymmdd'), 'yyyymmdd') +
to_number(decode(to_char(trunc(to_date(to_char(sdate,
'yyyymmdd'),
'yyyymmdd'),
'yyyy'),
'd'),
'1',
'8',
to_char(trunc(to_date(to_char(sdate,
'yyyymmdd'),
'yyyymmdd'),
'yyyy'),
'd'))) - 2)),
'ww')
into result
from dual; return Result;
end to_week_by_year;
select (trunc(sysdate,'yy')+(32-1)*7) from dual;
--最后一天:
select (trunc(sysdate,'yy')+(32-1)*7+6) from dual;
--------首先获取当天所在周的第一天 使用trunc(sysdate,'d') --返回当前星期的第一天.
select trunc(sysdate,'d') from dual--------然后查询出当前是当年的多少周to_char(data,'ww')
select to_char(trunc(sysdate,'d'),'ww')-------然后查询出来的值得减去32的日期,再使用trunc,得出32周的第一天,加上7得出最后一天
select trunc(trunc(sysdate,'d')- (to_char(trunc(sysdate,'d'),'ww')-32),'d') from dual
------获取当前位于一年中的多少周
select to_char(trunc(sysdate,'d'),'ww') from dual
--关键在于当年第一周的第一天和最后一天怎么算,后面只需加上7天就是一周,类推
--还有就是确定的是,一年总共只有53周
--Oracle中周日为第一天 ,周六为最后一天
SELECT LEVEL 周次,
(Trunc(SYSDATE,'yyyy')-7)
+
(7-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1)+(LEVEL-1)*7 当周第一天,
(Trunc(SYSDATE,'yyyy')-7)
+
(7-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1)+(LEVEL-1)*7+6 当周最后一天
FROM dual
CONNECT BY LEVEL<=53
select (trunc(sysdate,'yy')+(32-1)*7) from dual;
--最后一天:
select (trunc(sysdate,'yy')+(32-1)*7+6) from dual;
2 Trunc(SYSDATE,'yyyy')-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1+31*7+6 "最后一天"
3 from dual
4 /第一天 最后一天
-------------- --------------
01-8月 -10 07-8月 -10SQL>
比对我7楼SQL运行的结果,你看看!
--再给的简单点:
SELECT LEVEL 周次,
(Trunc(SYSDATE,'yyyy')-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1)+(LEVEL-1)*7 当周第一天,
(Trunc(SYSDATE,'yyyy')+(7-To_Char(Trunc(SYSDATE,'yyyy'),'d')))+(LEVEL-1)*7 当周最后一天
FROM dual
CONNECT BY LEVEL<=53