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