manipular fechas con sp

02/11/2004 - 18:10 por ac | Informe spam
Hola a todos, tengo este sp y al verificar la fecha de
salida no me da la que deberìa obtener, la idea es
obtener la fecha del mes anterior (último dìa) al que se
ingreso

Ingresa: 26/04/2004, OBTENER: 31/03/2004

el sp si lo hace, pero al actualizar la variable @Fecha
me guarda otra fecha. ¿Alguien sabra como puedo
solucionarlo?

Mil gracias y para los que no trabajaron hoy que
disfruten su día de descanso

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

ALTER PROCEDURE sp_Fecha_Anterior (@Fecha DATETIME
OUTPUT)

AS

ingresada

DECLARE @Dia as NUMERIC(22,8),
@Mes as NUMERIC(22,8),
@Año as NUMERIC(22,8)

SET @Dia = DAY(@Fecha)
SET @Mes = MONTH(@Fecha)
SET @Año = YEAR(@Fecha)


IF @Año IN(2004,2008,2012) AND @Mes = 3
BEGIN
SET @Dia = 29
END
ELSE
SET @Dia = 28

IF @Mes IN (2,4,6,9,11)
BEGIN
SET @Dia = 31
END
IF @Mes IN(1,5,7,8,10,12)
BEGIN
SET @Dia = 30
END

SET @Mes = @Mes -1

SET @Fecha = @Dia+@Mes+@Año

print @Fecha

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Preguntas similare

Leer las respuestas

#1 Maxi
02/11/2004 - 18:15 | Informe spam
hola, las fechas las deberias pasar en formato ANSI YYYYMMDD


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"ac" escribió en el mensaje
news:2de001c4c0fe$db71a1e0$
Hola a todos, tengo este sp y al verificar la fecha de
salida no me da la que deberìa obtener, la idea es
obtener la fecha del mes anterior (último dìa) al que se
ingreso

Ingresa: 26/04/2004, OBTENER: 31/03/2004

el sp si lo hace, pero al actualizar la variable @Fecha
me guarda otra fecha. ¿Alguien sabra como puedo
solucionarlo?

Mil gracias y para los que no trabajaron hoy que
disfruten su día de descanso

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

ALTER PROCEDURE sp_Fecha_Anterior (@Fecha DATETIME
OUTPUT)

AS

ingresada

DECLARE @Dia as NUMERIC(22,8),
@Mes as NUMERIC(22,8),
@Año as NUMERIC(22,8)

SET @Dia = DAY(@Fecha)
SET @Mes = MONTH(@Fecha)
SET @Año = YEAR(@Fecha)


IF @Año IN(2004,2008,2012) AND @Mes = 3
BEGIN
SET @Dia = 29
END
ELSE
SET @Dia = 28

IF @Mes IN (2,4,6,9,11)
BEGIN
SET @Dia = 31
END
IF @Mes IN(1,5,7,8,10,12)
BEGIN
SET @Dia = 30
END

SET @Mes = @Mes -1

SET @Fecha = @Dia+@Mes+@Año

print @Fecha

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.781 / Virus Database: 527 - Release Date: 25/10/2004
Respuesta Responder a este mensaje
#2 JOSE DAVID GALVIZ M
02/11/2004 - 18:39 | Informe spam
El problema está en que has declarado @Dia, @Mes, @Año como INT.

Entonces cuando usas la instrucción:
SET @Fecha = @Dia+@Mes+@Año

Estas sumando los número y luego implicitamente haces una CAST de INT a
DATETIME.

Declara las variables as CHAR o VARCHAR


Ingeniero JOSE DAVID GALVIZ MUÑOZ
Microsoft Certified Application Developer
Desarrollador Cinco Estrellas 4

"ac" escribió en el mensaje
news:2de001c4c0fe$db71a1e0$
Hola a todos, tengo este sp y al verificar la fecha de
salida no me da la que deberìa obtener, la idea es
obtener la fecha del mes anterior (último dìa) al que se
ingreso

Ingresa: 26/04/2004, OBTENER: 31/03/2004

el sp si lo hace, pero al actualizar la variable @Fecha
me guarda otra fecha. ¿Alguien sabra como puedo
solucionarlo?

Mil gracias y para los que no trabajaron hoy que
disfruten su día de descanso

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

ALTER PROCEDURE sp_Fecha_Anterior (@Fecha DATETIME
OUTPUT)

AS

ingresada

DECLARE @Dia as NUMERIC(22,8),
@Mes as NUMERIC(22,8),
@Año as NUMERIC(22,8)

SET @Dia = DAY(@Fecha)
SET @Mes = MONTH(@Fecha)
SET @Año = YEAR(@Fecha)


IF @Año IN(2004,2008,2012) AND @Mes = 3
BEGIN
SET @Dia = 29
END
ELSE
SET @Dia = 28

IF @Mes IN (2,4,6,9,11)
BEGIN
SET @Dia = 31
END
IF @Mes IN(1,5,7,8,10,12)
BEGIN
SET @Dia = 30
END

SET @Mes = @Mes -1

SET @Fecha = @Dia+@Mes+@Año

print @Fecha

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Respuesta Responder a este mensaje
#3 ac
02/11/2004 - 18:50 | Informe spam
Muchas gracias a todos. me ayudaron bastante

ac

Bonito día
Respuesta Responder a este mensaje
#4 ulises
02/11/2004 - 19:21 | Informe spam
Entiendo que dada una fecha quieres obtener el último día
del mes anterior, entonces podrías hacer :

SELECT
DATEADD(day,-1,Substring(CONVERT(char(8),@fecha,112),1,6) +
'01')

Saludos,
Ulises

Hola a todos, tengo este sp y al verificar la fecha de
salida no me da la que deberìa obtener, la idea es
obtener la fecha del mes anterior (último dìa) al que se
ingreso

Ingresa: 26/04/2004, OBTENER: 31/03/2004

el sp si lo hace, pero al actualizar la variable @Fecha
me guarda otra fecha. ¿Alguien sabra como puedo
solucionarlo?

Mil gracias y para los que no trabajaron hoy que
disfruten su día de descanso

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

ALTER PROCEDURE sp_Fecha_Anterior (@Fecha DATETIME
OUTPUT)

AS

ingresada

DECLARE @Dia as NUMERIC(22,8),
@Mes as NUMERIC(22,8),
@Año as NUMERIC(22,8)

SET @Dia = DAY(@Fecha)
SET @Mes = MONTH(@Fecha)
SET @Año = YEAR(@Fecha)


IF @Año IN(2004,2008,2012) AND @Mes = 3
BEGIN
SET @Dia = 29
END
ELSE
SET @Dia = 28

IF @Mes IN (2,4,6,9,11)
BEGIN
SET @Dia = 31
END
IF @Mes IN(1,5,7,8,10,12)
BEGIN
SET @Dia = 30
END

SET @Mes = @Mes -1

SET @Fecha = @Dia+@Mes+@Año

print @Fecha

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
.

Respuesta Responder a este mensaje
#5 Luis Ramírez
02/11/2004 - 20:39 | Informe spam
ALTER PROCEDURE sp_Fecha_Anterior (@Fecha DATETIME
OUTPUT)

Set @Fecha=Datediff(d,Day(@Fecha ),@Fecha )

print @Fecha





"ac" wrote in message
news:2de001c4c0fe$db71a1e0$
Hola a todos, tengo este sp y al verificar la fecha de
salida no me da la que deberìa obtener, la idea es
obtener la fecha del mes anterior (último dìa) al que se
ingreso

Ingresa: 26/04/2004, OBTENER: 31/03/2004

el sp si lo hace, pero al actualizar la variable @Fecha
me guarda otra fecha. ¿Alguien sabra como puedo
solucionarlo?

Mil gracias y para los que no trabajaron hoy que
disfruten su día de descanso

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

ALTER PROCEDURE sp_Fecha_Anterior (@Fecha DATETIME
OUTPUT)

AS

ingresada

DECLARE @Dia as NUMERIC(22,8),
@Mes as NUMERIC(22,8),
@Año as NUMERIC(22,8)

SET @Dia = DAY(@Fecha)
SET @Mes = MONTH(@Fecha)
SET @Año = YEAR(@Fecha)


IF @Año IN(2004,2008,2012) AND @Mes = 3
BEGIN
SET @Dia = 29
END
ELSE
SET @Dia = 28

IF @Mes IN (2,4,6,9,11)
BEGIN
SET @Dia = 31
END
IF @Mes IN(1,5,7,8,10,12)
BEGIN
SET @Dia = 30
END

SET @Mes = @Mes -1

SET @Fecha = @Dia+@Mes+@Año

print @Fecha

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida