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:
Mostrar la cita
#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:

Mostrar la cita
#3 Alejandro Mesa
18/10/2007 - 16:01 | Informe spam
Corrección:

Mostrar la cita
Ese es el formato ISO.

AMB

"Alejandro Mesa" wrote:

Mostrar la cita
#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
Ads by Google
Search Busqueda sugerida