E ai pessoas,
Nestes dias, dando uma olhada em alguns rascunhos do blog, encontrei quatro scripts que considero interessante compartilhar, principalmente pelo fato deles evoluírem de um para outro de forma bem clara.
O primeiro script recupera o último dia do mês:
DECLARE @Mes INT = 2, @Ano INT = 2011 DECLARE @DtaFinal DATETIME SET @DtaFinal = DATEADD(YEAR, @Ano - 1900, DATEADD(MONTH, @Mes, 0)) - 1 SELECT CONVERT(VARCHAR, @DtaFinal, 103) AS [Último dia de um determinado mês] GO
Este segundo, usa a função DATEPART para recuperar a quantidade de dias do mês:
DECLARE @Mes INT = 2, @Ano INT = 2011 DECLARE @DtaFinal DATETIME SET @DtaFinal = DATEADD(YEAR, @Ano - 1900, DATEADD(MONTH, @Mes, 0)) - 1 SELECT DATEPART(DAY, @DtaFinal) AS [Número de dias de um determinado mês] GO
Este terceiro script, usa uma CTE para relacionar os dias de um determinado mês:
DECLARE @Mes INT = 2, @Ano INT = 2011 DECLARE @Num INT DECLARE @DtaInicio DATETIME DECLARE @DtaFinal DATETIME SET @DtaInicio = DATEADD(YEAR, @Ano - 1900, DATEADD(MONTH, @Mes - 1, 0)) SET @DtaFinal = DATEADD(YEAR, @Ano - 1900, DATEADD(MONTH, @Mes, 0)) - 1 ;WITH CTE (Dta) AS ( SELECT @DtaInicio UNION ALL SELECT Dta + 1 FROM CTE WHERE Dta < @DtaFinal ) SELECT Dta AS [Dia] FROM CTE GO
E este ultimo script, usa um CASE em combinação de um COUNT para contar a quantidade de sábados e domingos de um determinado mês:
DECLARE @Mes INT = 2, @Ano INT = 2011 DECLARE @Num INT DECLARE @DtaInicio DATETIME DECLARE @DtaFinal DATETIME SET @DtaInicio = DATEADD(YEAR, @Ano - 1900, DATEADD(MONTH, @Mes - 1, 0)) SET @DtaFinal = DATEADD(YEAR, @Ano - 1900, DATEADD(MONTH, @Mes, 0)) - 1 ;WITH CTE (Dta) AS ( SELECT @DtaInicio UNION ALL SELECT Dta + 1 FROM CTE WHERE Dta < @DtaFinal ) --DATEPART(W, Dta) = 1 // Domingo --DATEPART(W, Dta) = 7 // Sábado SELECT @Num = COUNT(CASE WHEN DATEPART(W, Dta) IN (1, 7) THEN 1 END) FROM CTE SELECT @Num AS [Número de sábado e domingos de um determinado mês] GO
Artigos relacionados:
Descobrindo o primeiro dia e o número de semanas de um mês
Lista de meses e dias da semana
Recuperando informações de dia, mes, ano, hora, minuto, segundo de datas