2009/2/2 Luiz Magno Diogo <[email protected]>:
>
> olá Newton,
>
> pra te ajudar o dow serve.
>
> select extract(dow from current_date)
>
> ele te retorna o dia da semana sendo 0 pra domingo.
>
> Abraço
>
> On Mon, 2 Feb 2009 11:47:12 -0200, Newton Teixeira do Nascimento Júnior
> <[email protected]> wrote:
>> Olá caros,
>>
>>
>>
>> preciso de uma função que dada uma data qualquer (DD/MM/YYYY ou
>> YYYY-MM-DD),  retorne a categoria dessa data:
>>
>> DIA ÚTIL (seg,ter,qua,qui,sexta), SABADO, DOMINGO ou FERIADO. Pra
>> feriado, eu já criei uma tabela com a lista dos feriados do ano.
>>
>> Existe uma função dentro do postgres que pode me ajudar nisso? Que
>> soluções vocês acham que seria mais adequada?
>>


Veja se este texto sobre feriados é de seu interesse:

FERIADOS

Os feriados no Brasil estão definidos nos termos da Lei Federal nº
9.335, de 10.dez.1996 (que complementou a lei nº 9.093 de
12.set.1995):

"Art. 1º São feriados civis:
 I - os declarados em lei federal;
 II - a data magna do Estado fixada em lei estadual.
 III - os dias do início e do término do ano do centenário de fundação
do Município, fixados em lei municipal.
 Art. 2º São feriados religiosos os dias de guarda, declarados em lei
municipal, de acordo com a tradição local e em número não superior a
quatro, neste incluída a Sexta-Feira da Paixão."

Os feriados nacionais são declarados pelas Leis Federais nº 10.607 de
19.dez.2002 e nº 6.802 de 30.jun.1980 sendo eles:
        1º de janeiro – Confraternização Universal,
        21 de abril – Tiradentes,
        1º de maio – Dia do Trabalho,
        7 de setembro – Independência do Brasil,
        12 de outubro – Nossa Senhora de Aparecida,
        2 de novembro – Finados,
        15 de novembro – Proclamação da República e
        25 de dezembro – Natal.

Reparem que o Carnaval, por incrível que possa parecer, não é um
feriado nacional!
Para os dias de  Carnaval normalmente existe a declaração de ponto facultativo.

No âmbito federal existem as portarias do Ministério do Planejamento,
Orçamento e Gestão que fixam, para os órgãos do Poder Executivo, os
feriados (aqueles já previstos na Lei) bem como os pontos
facultativos. Para 2009:
http://www.planejamento.gov.br/secretarias/upload/Legislacao/Portarias/081106_port_525.pdf

As datas magnas dos estados são, por exemplo:
        BA – 02.jul – Independência da Bahia
        SP – 09.jul – Revolução Constitucionalista
        RS – 20.set – Revolução Farroupilha
pesquise a de cada um dos estados de seu interesse.

No âmbito municipal cada município declara em lei quais serão os
feriados a observar bem como quais os pontos facultativos. Cumpre
ressaltar que alguns municípios estipulam mais de quatro feriados
locais (em desacordo com a Lei Federal?). Verifique quais são eles nos
munícipios de interesse. Por exemplo:

São Paulo – SP – (Lei nº 13.707/2004)
        Aniversário da Cidade   25 de Janeiro
        Finados                 02 de Novembro
        Dia da Consciência Negra        20 de Novembro
        Sexta-feira da Paixão           Data móvel
        Corpus Christi                  Data móvel
Porto Alegre – RS – (Lei 9.252/2003)
        N. S. Navegantes                02 de fevereiro
        Dia da Consciência Negra        20 de novembro
        Sexta-Feira Santa               Data móvel
        Corpus Christi                  Data móvel
Vitória – ES – (Lei 1732/1967)
        N. S. da Penha          24 de abril
        N. S. da Vitória                08 de setembro
        Sexta-feira da Paixão           Data móvel
        Corpus Christi                  Data móvel

Os feriados móveis são determinados em função da Páscoa. Em anexo
temos uma rotina que, para um dado ano, calcula em que dia cai o
domingo de Páscoa. A partir do dia da Páscoa temos:
        Terça feira de Carnaval: -47 dias
        Sexta feira da Paixão: -2 dias
        Ascensão: +39 dias
        Corpus Christi: +60 dias

Especificamente para a Justiça Federal temos a Lei Nº 5.010/1966 que determina:
"Art. 62. Além dos fixados em lei, serão feriados na Justiça Federal,
inclusive nos Tribunais Superiores:
I - os dias compreendidos entre 20 de dezembro e 6 de janeiro, inclusive;
II - os dias da Semana Santa, compreendidos entre a quarta-feira e o
Domingo de Páscoa;
III - os dias de segunda e terça-feira de Carnaval;
IV - os dias 11 de agosto, 1º e 2 de novembro e 8 de dezembro.
(Redação da Lei Nº 6.741/1979)"

As atividades bancárias são reguladas pelo Banco Central que determina
quais os dias em que não haverá expediente bancário (por ex. Carnaval,
último dia do ano). A Bovespa também determina quais os dias em que
não haverá pregão.

Por último temos os feriados de categorias profissionais, normalmente
estipulados em acordos intersindicais, como por exemplo:
        Dia do Comerciário
        Dia do Funcionário Público
        Dia do Professor
verifique quais deles podem se aplicar ao seu caso.


Abaixo uma função PL/pgSQL que a data do domingo de Páscoa de um dado ano.

---
CREATE FUNCTION pascoa(ano integer) RETURNS date AS $$
--
-- Calcula a data do domingo de Páscoa para um dado ano.
--
-- Algorítmo de Meeus/Jones/Butcher para calendário Gregoriano
--
-- Por Jean Meeus em "Astronomical Algorithms" (1991),
-- onde cita Spencer Jones - "General Astronomy" (1922) e
-- Journal of the British Astronomical Association (1977) que,
-- por sua vez, cita "Butcher's Ecclesiastical Calendar" (1876).
-- Este algorítmo também aparece em "The Old Farmer's Almanac" (1977).
--
-- http://en.wikipedia.org/wiki/Computus
--
-- Datas derivadas:
-- . Terça feira de Carnaval: -47 dias
-- . Sexta feira da Paixão: -2 dias
-- . Ascensão: +39 dias
-- . Pentecostes: +49 dias (+50 dias?)
-- . Corpus Christi: +60 dias
--
DECLARE
    a integer;
    b integer;
    c integer;
    d integer;
    e integer;
    f integer;
    g integer;
    h integer;
    i integer;
    k integer;
    l integer;
    m integer;
    dia integer;
    mes integer;

BEGIN

        a = ano % 19;
        b = ano / 100;
        c = ano % 100;
        d = b / 4;
        e = b % 4;
        f = (b + 8) / 25;
        g = (b - f + 1) / 3;
        h = (19 * a + b - d - g + 15) % 30;
        i = c / 4;
        k = c % 4;
        l = (32 + 2 * e + 2 * i - h - k) % 7;
        m = (a + 11 * h + 22 * l) / 451;
        mes = (h + l - 7 * m + 114) / 31;
        dia = ((h + l - 7 * m + 114) % 31) + 1;
        RETURN to_date(ano || '-' || mes || '-' || dia, 'yyyy-mm-dd');

END;
$$ LANGUAGE plpgsql;


-- Para testar:
SELECT pascoa, pascoa-47 as "Carnaval", pascoa-2 as "Paixão",
       pascoa+60 as "Corpus Christi", pascoa+39 as "Ascensão"
  FROM (SELECT pascoa(ano) FROM generate_series(2000,2010) ano) foo;


Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a