Subject: Re: trocar dia por 01 - msg#00904
List: db.postgresql.brasil
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?
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