jump to navigation

Comparar fechas en SQL sin tomar en cuenta la hora 30 marzo, 2007

Posted by haegeth in SQL.
trackback

En ocasiones necesitamos comparar una fecha obtenida desde una aplicación, la cual no tiene hora, y al compararla con una fecha en un registro de una base de datos. Aunque la fecha coinsida, si las horas son diferentes la fecha es validada como diferente.

El problema lo solucioné de la siguiente manera:

Primero, enviamos la fecha desde la aplicación en formato de cadena estandar, es decir Fecha.ToString(“s”)

Despues, dentro del query el parametro de la fecha que queremos comparar se verá algo así como:

@pvFecha = ’2007-03-05T12:00:00′
(parámetro enviado desde la aplicacion como fecha en formato de texto estandar)

Despues, desde el query podemos comparar las fechas como cadenas, comparando la fecha que enviamos como parametro y la fecha de la base de datos de la siguiente manera:

Así podemos comparar las dos fechas como cadenas sin tomar en cuenta la hora ni modificar los registros originales

About these ads

Comentarios»

1. Bora - 18 abril, 2007

Muy buenas mi estimado haegeth. La forma en que propones comparar las fechas tiene un problema logico grabe ya que si quiero saber entre las dos fechas siguientes cual es mayor me va ha dar una respuesta erronea
ejem:
**************************************************************
declare @fecha1 as datetime
declare @fecha2 as datetime
set @fecha1=’2007-01-30T12:00:00′
set @fecha2=’2007-02-01T12:00:00′
set @fecha1=cast(@fecha1 as datetime)
set @fecha2=cast(@fecha2 as datetime)
select convert(varchar,@fecha1,103) as fecha1,convert(varchar,@fecha2,103) as fecha2,case when convert(varchar,@fecha1,103) > convert(varchar,@fecha2,103) then ‘Fecha1 es Mayor’ else ‘Fecha2 es Mayor’ end as Comparacion
*****************************************************************
| fecha1 | fecha2 | Comparacion |
| 30/01/2007 | 01/02/2007 | Fecha1 es Mayor |
*****************************************************************

Lo cual genera un error de logica:
’30/01/2007′ > ’01/02/2007′
por que se comparan cadenas donde tiene mayor valor en ascii el ’3′ que el ’0′

La solucion para esta comparacion es cambiar el tipo de conversion de 103 a 102, el cual convierte a un formato de “yyymmdd” y haciendo la comparacion de estas cadenas siempre nos va ha dar correcto ejem:
’20070130′

kradle - 21 julio, 2009

si no me equivoco quisistes decir 112 ?

2. haegeth - 19 abril, 2007

Muchas gracias por el comentario Bora, y si, en eso tienes razon, si quieres obtener la fecha mayor, tu metodo es el adecuado.
El método que yo posteo funciona al comparar que dos fechas sean exactamente iguales, y lo diseñé en base a un problema que tenia en una terminal con pocket PC, ya que el compact framework me estaba modificando la hora y el uso horario debido a la configuración regional. El método que propongo fue diseñado para evitar éste problema, ya que no puedo estar cuidando a mi cliente para que sus terminales estén bien configuradas, por lo tanto, tengo que asegurarme de que mis filtros de fechas funcione APDP.
Fijate que el Compact Framework tiene un comportamiento de ajuste de uso horario, aún cuando envias las fechas en formato de texto estandar, entonces, si mi fecha no tiene hora (00:00:00.000) si por el uso horario me resta horas, el dia de i fecha de caducidad puede cambiar a un dia anterior, y esto puede afectar a los procesos que manejan las fechas.
Saludos cordiales y un abrazo :-)

3. joaquin salazar - 10 octubre, 2008

como soluciono el inconveniente que algunas fechas al extraer el mes correspondiente me devuelve el mes siguiente ej 30/09/2009 que es almacenado como 39721

4. damisio - 16 agosto, 2009

como podria comparar horas, por ejemplo 12:00 y 12:00 que me diga cual es el mayor o menor

5. nadie - 26 agosto, 2009

Eso funciona, pero no usa el índice de la base datos

6. jose - 7 noviembre, 2010

como puedo saber mi ultima fecha de pago y la fecha anterior a la del ultimo pago en sql¿?¿?


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: