Quantidade de Dias no Mes

SQL Server

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
Max

Max

Curtidas 0

Respostas

Alex Lekao

Alex Lekao

18/09/2012

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.
GOSTEI 0
Max

Max

18/09/2012

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

Bruno Leandro

18/09/2012

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)
GOSTEI 0
Alex Lekao

Alex Lekao

18/09/2012

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.
GOSTEI 0
Alex Lekao

Alex Lekao

18/09/2012

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.
GOSTEI 0
Max

Max

18/09/2012

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.



GOSTEI 0
Bruno Leandro

Bruno Leandro

18/09/2012

Ola Maxuel voce realizou o teste com o comando que passei ?
GOSTEI 0
Alex Lekao

Alex Lekao

18/09/2012

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.
GOSTEI 0
Max

Max

18/09/2012

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)
GOSTEI 0
Max

Max

18/09/2012

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.
GOSTEI 0
Bruno Leandro

Bruno Leandro

18/09/2012

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))
GOSTEI 0
Alex Lekao

Alex Lekao

18/09/2012

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.
GOSTEI 0
Alex Lekao

Alex Lekao

18/09/2012

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)
GOSTEI 0
Max

Max

18/09/2012

Show de bola, deu certo.
Valeu pela força.
GOSTEI 0
Alex Lekao

Alex Lekao

18/09/2012

blz.
GOSTEI 0
POSTAR