Oracle计算自然周

create or replace function Getweekbydate(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 Getweekbydate;

posted @ 2024-12-30 14:27  Iven_lin  阅读(10)  评论(0编辑  收藏  举报