osdir.com
mailing list archive

Subject: Re: trocar dia por 01 - msg#00904

List: db.postgresql.brasil

Date: Prev Next Index Thread: Prev Next Index
Luciana:

>
> o objetivo disso tudo é: fazer uma funcao que me diga quantos dias
> uteis
> tem o mes de uma determinada data ( passada como parametro pra
> funcao ).
>
> mas pra isso eu preciso:
> 1) saber qual o ultimo dia do mes
> 2) saber quantos dias tem o mes
> 3) saber quais desses dias é dia de semana
> 3) e somar todos os dias de semana
>
> mas nao sei se da pra fazer tudo isso só numa funcao de postgres.
>
> dá ?

Aí está a sua função. Mais uma modesta contribuição nossa
para esta lista.

Espero que ajude.

Criação da função:
=================

CREATE OR REPLACE FUNCTION public.dias_uteis_mes(timestamp) RETURNS
integer AS '

declare

data ALIAS FOR $1;
data_inicio timestamp;
data_add timestamp;

dias_uteis integer;
dias_nao_uteis_add integer;

dias_uteis_add integer;
dia_da_semana char(1);

BEGIN

data_inicio := to_timestamp(''01/'' || extract(month from data)
|| ''/'' || extract(year from data),''DD/MM/YYYY'') ;
data_add := data_inicio;
dias_uteis_add := 0;
dias_nao_uteis_add := 0;

WHILE extract(month from data_inicio) = extract(month from
data_add) LOOP

dias_uteis_add := dias_uteis_add + 1;
SELECT data_add::timestamp + ''1 day''::interval into data_add;


select date_part( ''dow'', date (data_add) ) into
dia_da_semana;

if dia_da_semana = ''0'' or dia_da_semana = ''6'' then
dias_nao_uteis_add := dias_nao_uteis_add + 1;
end if;


END LOOP;

dias_uteis := dias_uteis_add - dias_nao_uteis_add;

RETURN dias_uteis;

END;

' LANGUAGE 'plpgsql' VOLATILE;
========================================


Utilização da Função:
====================

select dias_uteis_mes('25/05/2003');
========================================

abraços,
Júlio Miguel



----------------------------------------------------------
Grupo PostgreSQL Brasil. Fundado em 1999.
Mensagens para: postgresql-br-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx
Desassociação:
postgresql-br-unsubscribe-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx
Site Web: http://br.groups.yahoo.com/group/postgresql-br


Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html





Was this page helpful?
Yes No
Thread at a glance:

Previous Message by Date: click to view message preview

DECIMAL

Alguem pode me dizer como faço no driver odbc p/ formatar numeros com decimalseparator = , (virgula) ??? [As partes desta mensagem que não continham texto foram removidas] ---------------------------------------------------------- Grupo PostgreSQL Brasil. Fundado em 1999. Mensagens para: postgresql-br-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Desassociação: postgresql-br-unsubscribe-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Site Web: http://br.groups.yahoo.com/group/postgresql-br Seu uso do Yahoo! Grupos é sujeito às regras descritas em: http://br.yahoo.com/info/utos.html

Next Message by Date: click to view message preview

Re: trocar dia por 01 (Errata)

Luciana e a galera: Peço desculpas porque a função que enviei na mensagem anterior (número 11118) estava extraindo o dia da semana depois de adicionar a data atual, o que caracteriza um erro clássico de desatenção. Fiz a correção e o que vale é esta função abaixo. Por favar, desconsiderem a mensagem anterior. Acho que foi o sono ... :-) Valeu, Júlio Miguel ================================ Luciana: > > o objetivo disso tudo é: fazer uma funcao que me diga quantos dias > uteis > tem o mes de uma determinada data ( passada como parametro pra > funcao ). > > mas pra isso eu preciso: > 1) saber qual o ultimo dia do mes > 2) saber quantos dias tem o mes > 3) saber quais desses dias é dia de semana > 3) e somar todos os dias de semana > > mas nao sei se da pra fazer tudo isso só numa funcao de postgres. > > dá ? Aí está a sua função. Mais uma modesta contribuição nossa para esta lista. Espero que ajude. Criação da função: ================= CREATE OR REPLACE FUNCTION public.dias_uteis_mes(timestamp) RETURNS integer AS ' declare data ALIAS FOR $1; data_inicio timestamp; data_add timestamp; dias_uteis integer; dias_nao_uteis_add integer; dias_uteis_add integer; dia_da_semana char(1); BEGIN data_inicio := to_timestamp(''01/'' || extract(month from data) || ''/'' || extract(year from data),''DD/MM/YYYY'') ; data_add := data_inicio; dias_uteis_add := 0; dias_nao_uteis_add := 0; WHILE extract(month from data_inicio) = extract(month from data_add) LOOP dias_uteis_add := dias_uteis_add + 1; select date_part( ''dow'', date (data_add) ) into dia_da_semana; if dia_da_semana = ''0'' or dia_da_semana = ''6'' then dias_nao_uteis_add := dias_nao_uteis_add + 1; end if; SELECT data_add::timestamp + ''1 day''::interval into data_add; END LOOP; dias_uteis := dias_uteis_add - dias_nao_uteis_add; RETURN dias_uteis; END; ' LANGUAGE 'plpgsql' VOLATILE; ======================================== Utilização da Função: ==================== select dias_uteis_mes('25/05/2003'); ======================================== abraços, Júlio Miguel ---------------------------------------------------------- Grupo PostgreSQL Brasil. Fundado em 1999. Mensagens para: postgresql-br-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Desassociação: postgresql-br-unsubscribe-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Site Web: http://br.groups.yahoo.com/group/postgresql-br Seu uso do Yahoo! Grupos é sujeito às regras descritas em: http://br.yahoo.com/info/utos.html

Previous Message by Thread: click to view message preview

Re: trocar dia por 01

At 16:36 29/4/2003 -0300, you wrote: > >tem como trocar o dia de uma data por 01 ? > >tive olhando o extract mas parece q ele só tira um pedaço da data. > >procurei um jeito de juntar os pedaços, com to_char e || , mas nao >deu certo. > >e mesmo assim , nao sei se daria certo, porq eu preciso adicionar 1 >mes à > >data, trocar o dia que deu por '01' e diminuir um dia dessa data, >tudo na > >mesma linha! > >Seria melhor explicar a lógica do seu problema para tratá-lo apartir >do seu conceito. Principalmente por que a sua explicação está >um pouco confusa. > >Caso seja complicado fazer direto, pode-se escrever uma função >para realizar isso, passando a data como parâmentro e retornando >como resposta a nova data calculada. o objetivo disso tudo é: fazer uma funcao que me diga quantos dias uteis tem o mes de uma determinada data ( passada como parametro pra funcao ). mas pra isso eu preciso: 1) saber qual o ultimo dia do mes 2) saber quantos dias tem o mes 3) saber quais desses dias é dia de semana 3) e somar todos os dias de semana mas nao sei se da pra fazer tudo isso só numa funcao de postgres. dá ? []s ---------------------------------------------------------- Grupo PostgreSQL Brasil. Fundado em 1999. Mensagens para: postgresql-br-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Desassociação: postgresql-br-unsubscribe-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Site Web: http://br.groups.yahoo.com/group/postgresql-br Seu uso do Yahoo! Grupos é sujeito às regras descritas em: http://br.yahoo.com/info/utos.html

Next Message by Thread: click to view message preview

Re: trocar dia por 01 (Errata)

Luciana e a galera: Peço desculpas porque a função que enviei na mensagem anterior (número 11118) estava extraindo o dia da semana depois de adicionar a data atual, o que caracteriza um erro clássico de desatenção. Fiz a correção e o que vale é esta função abaixo. Por favar, desconsiderem a mensagem anterior. Acho que foi o sono ... :-) Valeu, Júlio Miguel ================================ Luciana: > > o objetivo disso tudo é: fazer uma funcao que me diga quantos dias > uteis > tem o mes de uma determinada data ( passada como parametro pra > funcao ). > > mas pra isso eu preciso: > 1) saber qual o ultimo dia do mes > 2) saber quantos dias tem o mes > 3) saber quais desses dias é dia de semana > 3) e somar todos os dias de semana > > mas nao sei se da pra fazer tudo isso só numa funcao de postgres. > > dá ? Aí está a sua função. Mais uma modesta contribuição nossa para esta lista. Espero que ajude. Criação da função: ================= CREATE OR REPLACE FUNCTION public.dias_uteis_mes(timestamp) RETURNS integer AS ' declare data ALIAS FOR $1; data_inicio timestamp; data_add timestamp; dias_uteis integer; dias_nao_uteis_add integer; dias_uteis_add integer; dia_da_semana char(1); BEGIN data_inicio := to_timestamp(''01/'' || extract(month from data) || ''/'' || extract(year from data),''DD/MM/YYYY'') ; data_add := data_inicio; dias_uteis_add := 0; dias_nao_uteis_add := 0; WHILE extract(month from data_inicio) = extract(month from data_add) LOOP dias_uteis_add := dias_uteis_add + 1; select date_part( ''dow'', date (data_add) ) into dia_da_semana; if dia_da_semana = ''0'' or dia_da_semana = ''6'' then dias_nao_uteis_add := dias_nao_uteis_add + 1; end if; SELECT data_add::timestamp + ''1 day''::interval into data_add; END LOOP; dias_uteis := dias_uteis_add - dias_nao_uteis_add; RETURN dias_uteis; END; ' LANGUAGE 'plpgsql' VOLATILE; ======================================== Utilização da Função: ==================== select dias_uteis_mes('25/05/2003'); ======================================== abraços, Júlio Miguel ---------------------------------------------------------- Grupo PostgreSQL Brasil. Fundado em 1999. Mensagens para: postgresql-br-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Desassociação: postgresql-br-unsubscribe-EYaqaC9dFX8MqA7zqLjoiV/I71DsQ//L@xxxxxxxxxxxxxxxx Site Web: http://br.groups.yahoo.com/group/postgresql-br Seu uso do Yahoo! Grupos é sujeito às regras descritas em: http://br.yahoo.com/info/utos.html
Sign up for updates to this mailing list. email:
Loading Comments...
Home | News | Patents | Sitemap | FAQ | advertise

Advertising by