Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PotHix

Contar dias úteis

Recommended Posts

Æ!!PessoALL,Eu tenho uma procedure que roda diáriamente e faz uma cobrança ao responsável quando sua atividade está atrasada por 2 dias, mas está ocorrendo o seguinte:A pessoa começa com a atividade na sexta a tarde, e quando é na segunda de manhã já tem a cobrança. Preciso dar um jeito de contar apenas os dias úteis.Alguem pode me dar uma força? =)Fico no aguardo de respostas!Há braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Æ!!PessoALL,Eu tenho uma procedure que roda diáriamente e faz uma cobrança ao responsável quando sua atividade está atrasada por 2 dias, mas está ocorrendo o seguinte:A pessoa começa com a atividade na sexta a tarde, e quando é na segunda de manhã já tem a cobrança. Preciso dar um jeito de contar apenas os dias úteis.Alguem pode me dar uma força? =)Fico no aguardo de respostas!Há braços

você quer contar dias úteis sem o os sabados e domingos ou quer excluir os feriados tb?Faça uns testes com: SELECT DATENAME(weekday, '2007-03-11')Deu uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você quer contar dias úteis sem o os sabados e domingos ou quer excluir os feriados tb?

 

Faça uns testes com: SELECT DATENAME(weekday, '2007-03-11')

 

Deu uma luz?

Æ!!

 

Cara...É o seguinte...

 

O que eu preciso é enviar uma cobrança quando algo está a mais de 2 dias parado, então eu não irei considerar os sabados e domingos ( os feriados não são tão importantes ).

 

Estava fazendo o seguinte:

 

SELECT campo FROM tabela WHERE datediff(day,data ,getdate()) > 2

 

Mas quando o campo data cair num final de semana eu preciso acrescentar 1 ou 2 dias, para assim ele me trazer apenas as atividades pendentes a 2 dias uteis.

 

Eu vi algo sobre datepart(dw,data), mas eu não soube integrar com os CASE.

 

Se alguem puder ajudar ficarei muito grato! =)

 

Há braços

 

Æ!!

 

OBS: Desculpe a demora em responder...eu estava aguardando a resposta por e-mail...Mas não marquei nada para notificar... ¬¬

 

Continuo no aguardo de resposta. =)

 

Obrigado pessoal!

 

Há braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

 

 

Acho que você terá de utilizar cursores.

 

Mas segue um exemplo do uso do case:

create table #tmp (dat datetime)create table #tmp1 (dat datetime,des_dia varchar(20),numero_dias int)insert into #tmp (dat) values ('2007/02/16')insert into #tmp (dat) values ('2007/02/17')insert into #tmp (dat) values ('2007/02/18')insert into #tmp (dat) values ('2007/02/19')INSERT INTO #tmp1 (dat,des_dia,numero_dias)SELECT dat, DATENAME(weekday, dat),CASE	WHEN DATENAME(weekday, dat) = 'Saturday' THEN	2   	WHEN DATENAME(weekday, dat) = 'Sunday' THEN	1	ELSE 2		 END from #tmpSELECT *, from #tmp1

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Æ!!OBS: sobre o CURSOR já tem um cursor sim na minha procedureAtualmente meu SELECT está parecido com isso:SELECT DISTINCT id_ped FROM ped_enviado, pedidos WHERE status = 0 AND datediff(day,data ,getdate()) > @QtdDiasPreciso colocar um CASE depois do WHERE...Eu estava tentando aqui mas não estava conseguindo...sempre dava erro...O CASE deveria vir no WHERE para quando for sabado ou domingo ele incluir os dias...É possível um CASE depois do WHERE? E se possível como eu faço?Desculpem o monte de perguntas...Mas é que eu sou novo e não utilizei os CASEs ainda.Aguardo resposta!Há braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure no Books Online do SQL:

Case - Transact-SQL Reference

 

Segue um exemplo que pode te ajudar

USE pubs

GO

SELECT Category =

CASE type

WHEN 'popular_comp' THEN 'Popular Computing'

WHEN 'mod_cook' THEN 'Modern Cooking'

WHEN 'business' THEN 'Business'

WHEN 'psychology' THEN 'Psychology'

WHEN 'trad_cook' THEN 'Traditional Cooking'

ELSE 'Not yet categorized'

END,

CAST(title AS varchar(25)) AS 'Shortened Title',

price AS Price

FROM titles

WHERE price IS NOT NULL

ORDER BY type, price

COMPUTE AVG(price) BY type

GO

 

 

Abs ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Æ!!Faz um tempão que eu pedi ajuda e agora que eu consegui parar para mexer nisso.Coloquei em testes agora, e acho que consegui resolver meu problema...Como eu disse, estou começando agora com as proedures, e todas as dicas me foram muito úteis! =)Usei o link do eriva para ver algumas coisas tambem...Acabei resolvendo com IFs: IF ( DATENAME(WEEKDAY,GETDATE()) ) = 'Monday' SET @CalcDiasFDS = @QtdDias + 2 ELSE IF ( DATENAME(WEEKDAY,GETDATE()) ) = 'Tuesday' SET @CalcDiasFDS = @QtdDias + 1 ELSE SET @CalcDiasFDS = @QtdDiasA procedure roda de madrugada com Jobs, e não roda nos finais de semana...Então ta tranquilo.Agradeço a todos pela ajuda!E qq problema já sei onde perguntar =)Há braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.