Funcion para devolver el numero de dias de un mes

06/08/2004 - 19:13 por mgs | Informe spam
Hola grupo, cual es la funcion que me devuelve el número de dias de un mes¡?

Preguntas similare

Leer las respuestas

#1 ulises
07/08/2004 - 13:24 | Informe spam
Podrías usar esta funcón :

CREATE FUNCTION dbo.diasenmes (@fecha as datetime)
RETURNS int
AS
BEGIN
DECLARE @dias int
IF MONTH(@fecha) = 2
BEGIN
DECLARE @fechachar char(08)
SET @fechachar = CAST(YEAR(@fecha) as char(4)) + '0229'
SET @dias = CASE ISDATE(@fechachar) WHEN 1 THEN 29 ELSE 28 END
END
ELSE
SET @dias = CASE MONTH(@fecha)
WHEN 1 THEN 31
WHEN 3 THEN 31
WHEN 4 THEN 30
WHEN 5 THEN 31
WHEN 6 THEN 30
WHEN 7 THEN 31
WHEN 8 THEN 31
WHEN 9 THEN 30
WHEN 10 THEN 31
WHEN 11 THEN 30
WHEN 12 THEN 31
ELSE 0
END
RETURN @dias
END

Saludos,
Ulises

On Fri, 6 Aug 2004 11:13:55 -0600, "mgs" wrote:

Hola grupo, cual es la funcion que me devuelve el número de dias de un mes¡?

Respuesta Responder a este mensaje
#2 Eladio Rincón
07/08/2004 - 15:01 | Informe spam
Hola Ulises,

una pequeña variación:

la idea es conseguir cual es el primer día del mes; entonces le sumas un mes y obtienes la diferencia en días ;-)

alter FUNCTION dbo.diasenmes (@fecha as datetime)
RETURNS int
AS
BEGIN
DECLARE @primerDia datetime
set @primerDia =
cast ( datepart ( yyyy, @fecha ) as varchar(4)) + -- Año
case when len ( cast ( datepart ( MM, @fecha ) as varchar(2) )) = 1
then '0' + cast ( datepart ( MM, @fecha ) as varchar(2))
else cast ( datepart ( MM, @fecha ) as varchar(2))
end + -- Mes
'01' -- Dia

return datediff ( day, @primerDia, dateadd ( mm, 1, @primerdia ))
END
go

select
dbo.diasenmes ( '20040115') Enero,
dbo.diasenmes ( '20040201') Febrero,
dbo.diasenmes ( '20040315') Marzo,
dbo.diasenmes ( '20040415') Abril


Eladio Rincón
SQL Server MVP, PASS Spanish Group
Solid Quality Learning Iberoamericana
http://www.SolidQualityLearning.com

http://www.siquelnet.com
"Comparte lo que sabes, aprende lo que no sepas." FGG


ulises wrote:
Podrías usar esta funcón :

CREATE FUNCTION dbo.diasenmes (@fecha as datetime)
RETURNS int
AS
BEGIN
DECLARE @dias int
IF MONTH(@fecha) = 2
BEGIN
DECLARE @fechachar char(08)
SET @fechachar = CAST(YEAR(@fecha) as char(4)) + '0229'
SET @dias = CASE ISDATE(@fechachar) WHEN 1 THEN 29 ELSE 28 END
END
ELSE
SET @dias = CASE MONTH(@fecha)
WHEN 1 THEN 31
WHEN 3 THEN 31
WHEN 4 THEN 30
WHEN 5 THEN 31
WHEN 6 THEN 30
WHEN 7 THEN 31
WHEN 8 THEN 31
WHEN 9 THEN 30
WHEN 10 THEN 31
WHEN 11 THEN 30
WHEN 12 THEN 31
ELSE 0
END
RETURN @dias
END

Saludos,
Ulises

On Fri, 6 Aug 2004 11:13:55 -0600, "mgs" wrote:

Hola grupo, cual es la funcion que me devuelve el número de dias de
un mes¡?
Respuesta Responder a este mensaje
#3 ulises
07/08/2004 - 16:06 | Informe spam
Hola Eladio,

También pensé en esa solución en la que definitivamente escribes menos
código, pero me queda la duda que es más eficiente si hacer siempre
esos cálculos o la asignación directa del número de días toda vez que
solo en el caso de febrero es necesario hacer ese tipo de cálculo.

Saludos,
Ulises

On Sat, 7 Aug 2004 15:01:28 +0200, Eladio Rincón
wrote:

Hola Ulises,

una pequeña variación:

la idea es conseguir cual es el primer día del mes; entonces le sumas un mes y obtienes la diferencia en días ;-)

alter FUNCTION dbo.diasenmes (@fecha as datetime)
RETURNS int
AS
BEGIN
DECLARE @primerDia datetime
set @primerDia =
cast ( datepart ( yyyy, @fecha ) as varchar(4)) + -- Año
case when len ( cast ( datepart ( MM, @fecha ) as varchar(2) )) = 1
then '0' + cast ( datepart ( MM, @fecha ) as varchar(2))
else cast ( datepart ( MM, @fecha ) as varchar(2))
end + -- Mes
'01' -- Dia

return datediff ( day, @primerDia, dateadd ( mm, 1, @primerdia ))
END
go

select
dbo.diasenmes ( '20040115') Enero,
dbo.diasenmes ( '20040201') Febrero,
dbo.diasenmes ( '20040315') Marzo,
dbo.diasenmes ( '20040415') Abril
Respuesta Responder a este mensaje
#4 Manuel Etcheto
09/08/2004 - 06:15 | Informe spam
Hola Eladio

una pequeña variación, siguiendo el mismo razonamiento pero sin formatear
caracteres

ALTER FUNCTION dbo.diasenmes (@fecha as datetime)
RETURNS int AS
BEGIN
DECLARE @D1 datetime, @D2 datetime
SELECT @D1 = @fecha - (DAY(@fecha)-1), @D2 = dateadd(mm, 1, @D1)
RETURN DATEDIFF(day, @D1, @D2)
END

Saludos
Manuel


"Eladio Rincón" wrote in message
news:#
Hola Ulises,

una pequeña variación:

la idea es conseguir cual es el primer día del mes; entonces le sumas un mes
y obtienes la diferencia en días ;-)

alter FUNCTION dbo.diasenmes (@fecha as datetime)
RETURNS int
AS
BEGIN
DECLARE @primerDia datetime
set @primerDia cast ( datepart ( yyyy, @fecha ) as varchar(4)) + -- Año
case when len ( cast ( datepart ( MM, @fecha ) as varchar(2) )) = 1
then '0' + cast ( datepart ( MM, @fecha ) as varchar(2))
else cast ( datepart ( MM, @fecha ) as varchar(2))
end + -- Mes
'01' -- Dia

return datediff ( day, @primerDia, dateadd ( mm, 1, @primerdia ))
END
go

select
dbo.diasenmes ( '20040115') Enero,
dbo.diasenmes ( '20040201') Febrero,
dbo.diasenmes ( '20040315') Marzo,
dbo.diasenmes ( '20040415') Abril


Eladio Rincón
SQL Server MVP, PASS Spanish Group
Solid Quality Learning Iberoamericana
http://www.SolidQualityLearning.com

http://www.siquelnet.com
"Comparte lo que sabes, aprende lo que no sepas." FGG


ulises wrote:
Podrías usar esta funcón :

CREATE FUNCTION dbo.diasenmes (@fecha as datetime)
RETURNS int
AS
BEGIN
DECLARE @dias int
IF MONTH(@fecha) = 2
BEGIN
DECLARE @fechachar char(08)
SET @fechachar = CAST(YEAR(@fecha) as char(4)) + '0229'
SET @dias = CASE ISDATE(@fechachar) WHEN 1 THEN 29 ELSE 28 END
END
ELSE
SET @dias = CASE MONTH(@fecha)
WHEN 1 THEN 31
WHEN 3 THEN 31
WHEN 4 THEN 30
WHEN 5 THEN 31
WHEN 6 THEN 30
WHEN 7 THEN 31
WHEN 8 THEN 31
WHEN 9 THEN 30
WHEN 10 THEN 31
WHEN 11 THEN 30
WHEN 12 THEN 31
ELSE 0
END
RETURN @dias
END

Saludos,
Ulises

On Fri, 6 Aug 2004 11:13:55 -0600, "mgs" wrote:

Hola grupo, cual es la funcion que me devuelve el número de dias de
un mes¡?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida