Quantidade de Dias no Mes

18/09/2012

Boa tarde, tenho uma coluna do tipo DateTime, preciso saber quantos dias aparece para um determinado mes.

Exemplo:
CounaData

2012-08-23 16:10:00.927
2012-08-23 16:13:41.487
2012-08-23 16:21:39.297
2012-09-03 14:42:51.490
2012-09-03 14:43:33.623
2012-09-03 14:44:27.633
2012-09-03 14:45:10.080

O mês 8 tem 3 dias, e o mês 9 tem 4 dias.

Como busco isso em uma query

Respostas

18/09/2012

Alex Lekao

Ola Boa tarde!!

Acredito que no forum ja tenha alguma coisa deste tipo, mas voce podera usar o DateDiff se nao me engano.

Voce ira colocar Datediff(dd,datainicial,datafinal).

Exemplo: Select datediff(dd,'2011/05/01','2011/05/31').

Verifica se é isso que voce quer.

Abraco.
Responder Citar

18/09/2012

Max Currículo

O DateDiff, pega a quantidade de dias entre duas datas, certo?
Então, eu quero a quantidade de dias de um determinado mês.
Responder Citar

18/09/2012

Bruno Leandro

Ola Maxuel veja se esse comando atende a sua demanda

select sum(1),DATEPART(year, CounaData) + DATEPART(month, CounaData)
from tabela
group by DATEPART(year, CounaData) + DATEPART(month, CounaData)
Responder Citar

18/09/2012

Alex Lekao

Ola Boa tarde!!

Acredito que no forum ja tenha alguma coisa deste tipo, mas voce podera usar o DateDiff se nao me engano.

Voce ira colocar Datediff(dd,datainicial,datafinal).

Exemplo: Select datediff(dd,'2011/05/01','2011/05/31')+1.

Verifica se é isso que voce quer.

Abraco.
Responder Citar

18/09/2012

Alex Lekao

Nossa minha maquina deu uma congelada e acabou enviando o codigo sem eu terminar.

É isso mesmo maxuel ele pega uma quantidade de dias entre duas datas, por isso no segundo codigo eu coloquei um "+1" para que considerasse o dia 01 tambem no calculo.

O que vc quer entar eh dentro de um periodo apresentar a quantidade de dias acumulado por mes?

Confesso que nao estou entendendo muito bem o que esta precisando.

Abraco.
Responder Citar

18/09/2012

Max Currículo

Tenho uma coluna do tipo datetime, queria uma query que retorne a quantidade de dias de um determinado mes da coluna Data_trabalho.

Coluna
Data_Trabalho
2012-08-31 15:45:26.153
2012-08-31 15:48:18.757
2012-08-31 15:58:33.790
2012-08-31 16:01:52.743
2012-09-03 10:14:16.307
2012-09-03 10:33:50.120
2012-09-03 10:34:56.047
2012-09-03 10:38:05.143
2012-09-03 10:38:27.310

Resultado
Qtde_dias Mes
4 8
5 9

Não sei se deu pra entender melhor.



Responder Citar

18/09/2012

Bruno Leandro

Ola Maxuel voce realizou o teste com o comando que passei ?
Responder Citar

18/09/2012

Alex Lekao

Opa, ta melhorando... rsrsr

Entao vc vai agrupar isso baseado em algum funcionario, coisa do tipo?

Estou tentando montar algo com aquilo que foi sugerido pelo Bruno mas nao deu muito certo.

To vendo alguma coisa para ver se consigo te ajudar.

Abraco.
Responder Citar

18/09/2012

Max Currículo

Bruno, tentei sim

SELECT SUM(1), DATEPART(YEAR,DaTa_Trabalho) + DATEPART(MONTH,DaTa_Trabalho)
FROM TB_SGA_TABULACAO
group by DATEPART(YEAR,DaTa_Trabalho) + DATEPART(MONTH,DaTa_Trabalho)


mas o resultado foi

----------- -----------
65          2020
62          2021

(2 row(s) affected)
Responder Citar

18/09/2012

Max Currículo

Alex,
Não estou agrupando por nada. Tenho que ter um resultado quem me mostre que no no mês 9 eu teve 5 dias, no mes 8 tive 4 dias.
Responder Citar

18/09/2012

Bruno Leandro

ok o datepart ta retornando inteiro tem que converter para texto, tente assim entao

SELECT SUM(1), CAST(DATEPART(YEAR,DaTa_Trabalho) as varchar(4)) + CAST(DATEPART(MONTH,DaTa_Trabalho) as varchar(2))
FROM TB_SGA_TABULACAO
group by CAST(DATEPART(YEAR,DaTa_Trabalho) as varchar(4)) + CAST(DATEPART(MONTH,DaTa_Trabalho) as varchar(2))
Responder Citar

18/09/2012

Alex Lekao

Maxuel, tente assim e me diga se da certo.

select
datediff(dd,MIN(datemi),max(datemi))+1,
DATEPART(MM,datemi),
DATEPART(YYYY,datemi)
from REQVDA
where datemi between '01.01.2012' and '31.07.2012'
group by DATEPART(MM,datemi),DATEPART(YYYY,datemi)

Abraco.
Responder Citar

18/09/2012

Alex Lekao

No codigo de sugeri vc pode usar a sugestao do Bruno para dar uma formatada na exibicao.

Desculpae mas na sugestao esta os campos do meu banco aqui, ficava mais facil para mim... rsrsr ;-.)

Ai ficaria assim:

SELECT
DATEDIFF(DD,MIN(DATEMI),MAX(DATEMI))+1,
CAST(DATEPART(MM,DATEMI) AS VARCHAR(2))+'/'+CAST(DATEPART(YYYY,DATEMI) AS VARCHAR(4))
from REQVDA
WHERE DATEMI BETWEEN '01.01.2012' AND '31.07.2012'
GROUP by DATEPART(MM,DATEMI),DATEPART(YYYY,DATEMI)
ORDER BY DATEPART(MM,DATEMI),DATEPART(YYYY,DATEMI)
Responder Citar

18/09/2012

Max Currículo

Show de bola, deu certo.
Valeu pela força.
Responder Citar

18/09/2012

Alex Lekao

blz.
Responder Citar