SQL> SELECT SYSDATE, to_char(SYSDATE,'WW') semana_ano
2 FROM dual;
SYSDATE SEMANA_ANO
----------- ----------
07/12/2005 49
então criei uma função que calcula corretamente a semana do ano levando em conta que a semana começa no domingo...
SQL> CREATE OR REPLACE FUNCTION fun_semana_ano(prm_data IN DATE) RETURN NUMBER IS
2 wrk_nr_semana_ano NUMBER;
3 wrk_nr_dia_semana1 NUMBER;
4 wrk_nr_dia_semana2 NUMBER;
5 BEGIN
6 --pego o dia da semana do primeiro dia do ano.
7 wrk_nr_dia_semana1 := to_number(to_char(to_date('01-jan-'||to_char(prm_data,'RRRR')),'D'));
8 --pego a semana do ano do Oracle
9 wrk_nr_semana_ano := to_number(to_char(prm_data,'WW'));
10 --pego o dia da semana do parâmetro
11 wrk_nr_dia_semana2 := to_number(to_char(prm_data,'D'));
12 --se o dia da semana do parâmetro for menor que o dia da semana do dia 01/jan
13 --então acrescento mais um a semana do ano do Oracle
14 IF wrk_nr_dia_semana2 < wrk_nr_dia_semana1 THEN
15 wrk_nr_semana_ano := wrk_nr_semana_ano + 1;
16 END IF;
17 --
18 RETURN(wrk_nr_semana_ano);
19 END;
20 /
Function created
SQL> SELECT SYSDATE, fun_semana_ano(SYSDATE) semana_ano
2 FROM dual;
SYSDATE SEMANA_ANO
----------- ----------
07/12/2005 50
[]´s
