Manejar fechas con parámetros Varchar

18/10/2007 - 03:05 por Martín | Informe spam
TEngo un sp que tiene un parámetro @fecha varchar(80) de entrada
no lo puedo modificar

y a esa @fecha entra con una fecha en formato: getdate()
es decir año mes día hr mins seg..etc...

y quiero saber como lo podría comparar para:

saber si es menor a getdate() y si no exede a 15 días el día de hoy
es decir, si está entre el día de hoy y 15 días más a lo sumo

pude hacerlo pero me salta error al convertir varchar a datetime
si alguien me da una mano se lo agradezco de antemano

Martín

Preguntas similare

Leer las respuestas

#1 Maxi
18/10/2007 - 04:19 | Informe spam
Martin, creo que tienes una confision de terminos, si el tipo de dato es
varchar entonces no es getdate(), ademas getdate() no retorna los datos en
un formato X sino que lo hara como este definido el login en el servidor.
De todas maneras, si quieres comparar y trabajarlo como fecha porque no lo
conviertes? o sea:

CONVERT(DATETIME,@PARAM)

y eso o bien lo asignas a una variable o lo usas directamente


"Martín" escribió en el mensaje de noticias
news:
TEngo un sp que tiene un parámetro @fecha varchar(80) de entrada
no lo puedo modificar

y a esa @fecha entra con una fecha en formato: getdate()
es decir año mes día hr mins seg..etc...

y quiero saber como lo podría comparar para:

saber si es menor a getdate() y si no exede a 15 días el día de hoy
es decir, si está entre el día de hoy y 15 días más a lo sumo

pude hacerlo pero me salta error al convertir varchar a datetime
si alguien me da una mano se lo agradezco de antemano

Martín

Respuesta Responder a este mensaje
#2 Alejandro Mesa
18/10/2007 - 15:58 | Informe spam
Martín,

Por que no posteas un ejemplo de lo que estas haciendo, asi tendremos mejor
idea de lo que se quiere.

Si el parametro es "varchar(80)", vaya fecha esa, entonces asegurate de que
el valor se pase con formato que sea independiente del lenguaje y/o seteo de
dateformat, como es el caso del formato ISO8601 "yyyy-mm-ddThh:mi:ss.mmm". De
esa forma el valor sera convertido a tipo datetime sin problema alguno,
cuando compares su valor con otro valor tipo datetime.

create procedure dbo.usp_p1
@d varchar(23)
as
set nocount on

if @d >= dateadd(day, -15, getdate())
select 'parametro mayor o igual que fecha corriente menos 15 dias' as c1
else
select 'parametro no es mayor o igual que fecha corriente menos 15 dias'
as c1
go

Si no queires tomar en cuenta el tiempo, entonces usa:

create procedure dbo.usp_p1
@d varchar(23)
as
set nocount on

if @d >= dateadd(day, -15, dateadd(day, datediff(day, 0, getdate()), 0))
select 'parametro mayor o igual que fecha corriente menos 15 dias' as c1
else
select 'parametro no es mayor o igual que fecha corriente menos 15 dias'
as c1
go

exec dbo.usp_p1 '2007-10-15T00:00:00.000'
go

exec dbo.usp_p1 '20071001' -- este es el formato ANSI yyyymmdd
go


AMB

"Martín" wrote:

TEngo un sp que tiene un parámetro @fecha varchar(80) de entrada
no lo puedo modificar

y a esa @fecha entra con una fecha en formato: getdate()
es decir año mes día hr mins seg..etc...

y quiero saber como lo podría comparar para:

saber si es menor a getdate() y si no exede a 15 días el día de hoy
es decir, si está entre el día de hoy y 15 días más a lo sumo

pude hacerlo pero me salta error al convertir varchar a datetime
si alguien me da una mano se lo agradezco de antemano

Martín



Respuesta Responder a este mensaje
#3 Alejandro Mesa
18/10/2007 - 16:01 | Informe spam
Corrección:

exec dbo.usp_p1 '20071001' -- este es el formato ANSI yyyymmdd
go



Ese es el formato ISO.

AMB

"Alejandro Mesa" wrote:

Martín,

Por que no posteas un ejemplo de lo que estas haciendo, asi tendremos mejor
idea de lo que se quiere.

Si el parametro es "varchar(80)", vaya fecha esa, entonces asegurate de que
el valor se pase con formato que sea independiente del lenguaje y/o seteo de
dateformat, como es el caso del formato ISO8601 "yyyy-mm-ddThh:mi:ss.mmm". De
esa forma el valor sera convertido a tipo datetime sin problema alguno,
cuando compares su valor con otro valor tipo datetime.

create procedure dbo.usp_p1
@d varchar(23)
as
set nocount on

if @d >= dateadd(day, -15, getdate())
select 'parametro mayor o igual que fecha corriente menos 15 dias' as c1
else
select 'parametro no es mayor o igual que fecha corriente menos 15 dias'
as c1
go

Si no queires tomar en cuenta el tiempo, entonces usa:

create procedure dbo.usp_p1
@d varchar(23)
as
set nocount on

if @d >= dateadd(day, -15, dateadd(day, datediff(day, 0, getdate()), 0))
select 'parametro mayor o igual que fecha corriente menos 15 dias' as c1
else
select 'parametro no es mayor o igual que fecha corriente menos 15 dias'
as c1
go

exec dbo.usp_p1 '2007-10-15T00:00:00.000'
go

exec dbo.usp_p1 '20071001' -- este es el formato ANSI yyyymmdd
go


AMB

"Martín" wrote:

> TEngo un sp que tiene un parámetro @fecha varchar(80) de entrada
> no lo puedo modificar
>
> y a esa @fecha entra con una fecha en formato: getdate()
> es decir año mes día hr mins seg..etc...
>
> y quiero saber como lo podría comparar para:
>
> saber si es menor a getdate() y si no exede a 15 días el día de hoy
> es decir, si está entre el día de hoy y 15 días más a lo sumo
>
> pude hacerlo pero me salta error al convertir varchar a datetime
> si alguien me da una mano se lo agradezco de antemano
>
> Martín
>
>
>
Respuesta Responder a este mensaje
#4 Martín
19/10/2007 - 04:18 | Informe spam
gracias a ambos me quedé con el:

if @d >= dateadd(day, -15, getdate())

y no puse ejemplo porque no tenía nada de código, me pidieron que haga un sp
con un parámetro varchar(80) que le iban a pasar una fecha
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida