Re: [pgbr-geral] Função para definir dada como dia ÚTIL, SABADO, DOMINGO e/ou FERIADO
2009/2/2 Luiz Magno Diogo ma...@mondriantecnologia.com: 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 newton.jun...@eletronorte.gov.br wrote: Olá caros, preciso de uma função que dada uma data qualquer (DD/MM/ ou -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 Negra20 de Novembro Sexta-feira da Paixão Data móvel Corpus Christi Data móvel Porto Alegre – RS – (Lei 9.252/2003) N. S. Navegantes02 de fevereiro Dia da Consciência Negra20 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ória08 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
Re: [pgbr-geral] Select Join em Historico de Status.
2009/2/3 Lucas Paz lucas...@gmail.com: Olá, Vamos a duvida: tenho as tabelas LANCAMENTOS, HISTORICO_LANCAMENTOS e STATUS . LANCAMENTOS - PK(id_lancamento),nome,data_entrada e etc. STATUS - PK(id_status), nome HISTORICO_LANCAMENTOS - PK(id_hist_lancamento), FK(id_lancamento), FK(id_status), data, usuario e etc... Acontece o seguinte, na tabela Lancamentos tenho os dados dos contratos, na tabela STATUS apenas os status que podem existir de determinado contrato, na tabela HISTORICO_LANCAMENTOS tenho os historicos de alteração dos status do contrato. os status dos contratos são: PAGO, PENDENTE, FALTA ALGUMA COISA, ENVIADO e etc. Nem tudo são flores... 1 contrato pode ter mais de 1 status ao mesmo tempo, ou seja um contrato pode estar pendente e ser pago... até ai blz... O que preciso fazer é um select que pegue os contratos que por exemplo tenham os status PAGO e PENDENTE. Preciso retornar o mesmo apenas 1 vez. Atualmente controlo isso por flags, a cada mudança no historico eu mudo 1 flag na tabela LANCAMENTOS. Funciona, mais gostaria de algo mais automatico pois se acrescento 1 status tenho que criar novas flags alterar os triggers e etc... alguem tem alguma sugestão? Não sei se entendi corretamente mas um GROUP BY e um MAX(data) não resolveria? Ou o status que deseja retornar não é necessariamente o mais recente? Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Select Join em Historico de Status.
select distinct l.nom, l.data_entrada, s.nome from lancamentos l, status s, historico h where l.id_lancamento = h.id_lancamento and h.id_status = s.id_status and (s.id_status = id do pago or s.id_status = id do pendente) []s Nilson Chagas - Ubuntu User 25794 --- Visite: http://www.amados.com.br/podcast http://tempodesalvacao.blogspot.com/ http://bbnradio.org/ 2009/2/3 Lucas Paz lucas...@gmail.com Olá, Vamos a duvida: tenho as tabelas LANCAMENTOS, HISTORICO_LANCAMENTOS e STATUS . LANCAMENTOS - PK(id_lancamento),nome,data_entrada e etc. STATUS - PK(id_status), nome HISTORICO_LANCAMENTOS - PK(id_hist_lancamento), FK(id_lancamento), FK(id_status), data, usuario e etc... Acontece o seguinte, na tabela Lancamentos tenho os dados dos contratos, na tabela STATUS apenas os status que podem existir de determinado contrato, na tabela HISTORICO_LANCAMENTOS tenho os historicos de alteração dos status do contrato. os status dos contratos são: PAGO, PENDENTE, FALTA ALGUMA COISA, ENVIADO e etc. Nem tudo são flores... 1 contrato pode ter mais de 1 status ao mesmo tempo, ou seja um contrato pode estar pendente e ser pago... até ai blz... O que preciso fazer é um select que pegue os contratos que por exemplo tenham os status PAGO e PENDENTE. Preciso retornar o mesmo apenas 1 vez. Atualmente controlo isso por flags, a cada mudança no historico eu mudo 1 flag na tabela LANCAMENTOS. Funciona, mais gostaria de algo mais automatico pois se acrescento 1 status tenho que criar novas flags alterar os triggers e etc... alguem tem alguma sugestão? att. -- Lucas Paz ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Select Join em Historico de Status.
2009/2/3 Lucas Paz lucas...@gmail.com: Olá novamente... Dando mais detalhes... Oswaldo: Não sei se entendi corretamente mas um GROUP BY e um MAX(data) não resolveria? Ou o status que deseja retornar não é necessariamente o mais recente? Osvaldo não resolve pq os status não estão em ordem! como disse nem tudo são flores... Nilson: select distinct l.nom, l.data_entrada, s.nome from lancamentos l, status s, historico h where l.id_lancamento = h.id_lancamento and h.id_status = s.id_status and (s.id_status = id do pago or s.id_status = id do pendente) Ao Nilson o Select que você mandou também não resolve pq eu preciso saber se o lancamento zz teve cadastrado os status x ou y, mais tenho que retornar apenas 1 vez o lancamento zz. Quero alguma coisa que retorne se o lancamento zz teve os status x e y cadastrados ou se teve x ou y cadastrados, para que quando for com o status x e y apareçam em uma tabela e quando forem x ou y apareçam em outra tabela, e lembrando que o lancamento zz pode ter os status x e y cadastrados aleatoreamente... consegui explicar? Dê uma olhada no exemplo de função de agregação array_accum em: http://www.postgresql.org/docs/current/interactive/xaggr.html Usando esta função em um GROUP BY lançamento você obterá um array dos status registrados para este lançamento. Daí usando, por exemplo, o operador @ (contains) ou @ (is contained by) você conseguirá determinar se apenas um, ou mais de um, dos status está(ão) registrado(s) para o lançamento. Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] [RESOLVIDO] Função para defin ir dada como dia ÚTIL, SABADO, DOMINGO e/ou F ERIADO
Muito obrigado Luiz pela ajuda. Eis a função que fiz : CREATE OR REPLACE FUNCTION Categoria_Dia(data date) RETURNS character varying(10) AS $BODY$ DECLARE dia integer; resultado character varying(10); BEGIN dia = extract(dow from data); if resultado = 0 then -- se o dia for um domingo resultado = 'DOMINGO'; elseif resultado = 6 then -- se o dia for um sabado resultado = 'SABADO'; elseif EXISTS (SELECT * FROM FERIADOS AS X WHERE X.data = data) then -- se o dia for um feriado resultado = 'FERIADO'; else -- trata-se de um dia útil resultado = 'DIA UTIL'; end if; return resultado; END; $BODY$ language 'plpgsql'; SELECT Categoria_Dia(CURRENT_DATE); Existe a tabela Feriados que tem a relação dos feriados do ano: CREATE TABLE FERIADOS ( data date NOT NULL, descricao character varying(50) NOT NULL, CONSTRAINT pk-feriados PRIMARY KEY (data, descricao) ) Um grande abraço a todos. Att. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: newton.jun...@eletronorte.gov.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Select Join em Historico de Status.
Olá novamente... Dando mais detalhes... *Oswaldo: Não sei se entendi corretamente mas um GROUP BY e um MAX(data) não resolveria? Ou o status que deseja retornar não é necessariamente o mais recente? * Osvaldo não resolve pq os status não estão em ordem! como disse nem tudo são flores... *Nilson: select distinct l.nom, l.data_entrada, s.nome from lancamentos l, status s, historico h where l.id_lancamento = h.id_lancamento and h.id_status = s.id_status and (s.id_status = id do pago or s.id_status = id do pendente)* Ao Nilson o Select que você mandou também não resolve pq eu preciso saber se o lancamento zz teve cadastrado os status x ou y, mais tenho que retornar apenas 1 vez o lancamento zz. Quero alguma coisa que retorne se o lancamento zz teve os status x e y cadastrados ou se teve x ou y cadastrados, para que quando for com o status x e y apareçam em uma tabela e quando forem x ou y apareçam em outra tabela, e lembrando que o lancamento zz pode ter os status x e y cadastrados aleatoreamente... consegui explicar? Att. 2009/2/3 Nilson Chagas nilson.chagas.si...@gmail.com []s Nilson Chagas - Ubuntu User 25794 --- Visite: http://www.amados.com.br/podcast http://tempodesalvacao.blogspot.com/ http://bbnradio.org/ 2009/2/3 Lucas Paz lucas...@gmail.com Olá, Vamos a duvida: tenho as tabelas LANCAMENTOS, HISTORICO_LANCAMENTOS e STATUS . LANCAMENTOS - PK(id_lancamento),nome,data_entrada e etc. STATUS - PK(id_status), nome HISTORICO_LANCAMENTOS - PK(id_hist_lancamento), FK(id_lancamento), FK(id_status), data, usuario e etc... Acontece o seguinte, na tabela Lancamentos tenho os dados dos contratos, na tabela STATUS apenas os status que podem existir de determinado contrato, na tabela HISTORICO_LANCAMENTOS tenho os historicos de alteração dos status do contrato. os status dos contratos são: PAGO, PENDENTE, FALTA ALGUMA COISA, ENVIADO e etc. Nem tudo são flores... 1 contrato pode ter mais de 1 status ao mesmo tempo, ou seja um contrato pode estar pendente e ser pago... até ai blz... O que preciso fazer é um select que pegue os contratos que por exemplo tenham os status PAGO e PENDENTE. Preciso retornar o mesmo apenas 1 vez. Atualmente controlo isso por flags, a cada mudança no historico eu mudo 1 flag na tabela LANCAMENTOS. Funciona, mais gostaria de algo mais automatico pois se acrescento 1 status tenho que criar novas flags alterar os triggers e etc... alguem tem alguma sugestão? att. -- Lucas Paz ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Lucas Paz ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral