terça-feira, 12 de março de 2013

Dicas de Funções Genéricas

Esta função bem simples retorna a quantidade de um determinado dia da semana existente em um intervalo de datas passados como parâmetro:



CREATE OR REPLACE FUNCTION QTTY_DAY_WEEK(p_dt_start DATE, p_dt_end DATE, p_day_week NUMBER) RETURN NUMBER IS

  v_day NUMBER;
  v_count NUMBER := 0;
  v_start NUMBER;
  v_end NUMBER;
 

BEGIN

  v_start := TRUNC(SYSDATE) - p_dt_start;
  v_end := TRUNC(SYSDATE) - p_dt_end;

  FOR v_aux IN v_end .. v_start LOOP

    SELECT to_char(SYSDATE - v_aux ,'d')
      INTO v_day
      FROM dual;

    IF v_day IN (p_day_week) THEN -- 1 is Sunday, 2 is Monday, ...
       v_count:= v_count + 1;
    END IF;

  ENd LOOP;
 
  RETURN(v_count);

END;


onde:

p_dt_start é a data inicial
p_dt_end é a data final
p_day_week é o dia da semana (1 para Domingo, 2 para Segunda, 3 para Terça, ..., 7 para Sábado)

para testar:


select QTTY_DAY_WEEK(TO_DATE('01/03/2013','DD/MM/RRRR'), TO_DATE('20/03/2013','DD/MM/RRRR'), 1) QTD_DOMINGOS
from dual;

Resultado:
3

Até a próxima postagem...


Nenhum comentário:

Postar um comentário