Autor Tema: SQL, comparar 2 fechas IF  (Leído 21436 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado llAudioslavell

  • Sv Member
  • ***
  • Mensajes: 126
SQL, comparar 2 fechas IF
« : febrero 18, 2012, 05:53:04 pm »
Hola a todos ^^ espero les valla bien....

Tal como dice el titulo, necesito comparar 2 campos de tipo fecha usando la sentencia IF, pero solo tomando en cuenta la fecha, mas no la hora...el resultado de esta comparacion lo almacenare en un campo de tipo Bit, por ejemplo si @fecha1 es mayor que @fecha2 entonces  @campo = ( verdadero o falso)
Soy muy mal explicando  :cry:
Gracias d antemano !!
Salu2  :thumbsup: !

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re: SQL, comparar 2 fechas IF
« Respuesta #1 : febrero 18, 2012, 06:37:52 pm »
¿Datediff no te servira?

Aqui podes ver la sintaxis para SQL SERVER.
http://technet.microsoft.com/es-es/library/ms139927.aspx




Desconectado m.wilian

  • MiembrosReales
  • *
  • Mensajes: 43
Re: SQL, comparar 2 fechas IF
« Respuesta #2 : febrero 18, 2012, 06:49:33 pm »

Puedes hacerlo haciendo uso de operadores "<>", en cualquier caso también puedes hacer uso de las funciones de fecha como te mencionaron (DATEDIFF). Por lo visto debes de saber previamente cuales son valores de las fechas.

Código: [Seleccionar]
IF _firtsdate <> _seconddate THEN
-- Lo que haya que hacer
ELSE
-- Si no son iguales
END IF;

Salvo que estes buscando operaciones especiales, para comparar esto es mas que suficiente.

Desconectado llAudioslavell

  • Sv Member
  • ***
  • Mensajes: 126
Re: SQL, comparar 2 fechas IF
« Respuesta #3 : febrero 18, 2012, 07:58:58 pm »
¿Datediff no te servira?

Aqui podes ver la sintaxis para SQL SERVER.
http://technet.microsoft.com/es-es/library/ms139927.aspx


Es que yo no necesito restar las 2 fechas.. .. solo quiero  hacer una comparacion  para saver quien es mayor que quien ....

Desconectado llAudioslavell

  • Sv Member
  • ***
  • Mensajes: 126
Re: SQL, comparar 2 fechas IF
« Respuesta #4 : febrero 18, 2012, 08:09:06 pm »
Puedes hacerlo haciendo uso de operadores "<>", en cualquier caso también puedes hacer uso de las funciones de fecha como te mencionaron (DATEDIFF). Por lo visto debes de saber previamente cuales son valores de las fechas.

Código: [Seleccionar]
IF _firtsdate <> _seconddate THEN
-- Lo que haya que hacer
ELSE
-- Si no son iguales
END IF;

Salvo que estes buscando operaciones especiales, para comparar esto es mas que suficiente.

como no manejo mucho SQL, mas .NET pense que seria asi:

IF @fecha1 > @fecha2 THEN
@campo = 1
END IF

pero claro que no sera igual en las sintaxis ... intente ejecutarlo asi como lo muestro  xD obvio que me salto un error: sintaxis incorrecta cerca de la palabra clave THEN ....  se que es la misma idea pero diferentes sintaxis.. es en lo unico que me equivoco y en eso quisiera que me ayuden

Desconectado m.wilian

  • MiembrosReales
  • *
  • Mensajes: 43
Re: SQL, comparar 2 fechas IF
« Respuesta #5 : febrero 18, 2012, 08:19:38 pm »
Código: [Seleccionar]
IF @fecha1 > @fecha2 THEN
@campo = 1;
END IF

Te funcionara siempre y cuando pasen dos cosas
  • Hayas declarado las variables, al parecer utilizar procedimientos almacenados, si es que no son funciones
  • Necesitas terminar cada linea con ;

De este modo
Código: [Seleccionar]
IF @fecha1 <> @fecha2 THEN
@campo = 1;
END IF;

O de este otro
Código: [Seleccionar]
IF NOT(@fecha1 = @fecha2) THEN
@campo = 1;
END IF;

En cualquier caso lo mejor que puedes hacer es revisar la sintaxis de la sentencia que planeas utilizar (IF .. THEN..), ademas de repasar un poco sobre los operadores, es lo que puedo decirte.

Por cierto lo lamento escribi operadores "<>", cuando en realidad "<>" es el operador de desigualdad.
« Última Modificación: febrero 18, 2012, 08:23:04 pm por m.wilian »

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re: SQL, comparar 2 fechas IF
« Respuesta #6 : febrero 18, 2012, 09:50:16 pm »
Es que yo no necesito restar las 2 fechas.. .. solo quiero  hacer una comparacion  para saver quien es mayor que quien ....

Con solo restar las fechas como decis, se podria hacer un procedimiento algo asi:

[MySQL]
Código: [Seleccionar]
DROP PROCEDURE IF EXISTS ejemplo;
DELIMITER //
CREATE PROCEDURE ejemplo(IN fecha1 DATE,IN fecha2 DATE)
BEGIN
  IF (DATEDIFF(fecha1,fecha2))=0 THEN
SELECT 'son iguales';
  ELSE
     SELECT IF( (DATEDIFF(fecha1,fecha2))>=1 ,'Fecha1 es mayor','Fecha2 es mayor') AS Resultado;
  END IF;   
END//
DELIMITER ;

Y al probarlo se tendrian estos resultados..

Código: [Seleccionar]
CALL ejemplo('2012-02-18','2012-02-18')

Resultado:
SON IGUALES

Código: [Seleccionar]
CALL ejemplo('2012-02-19','2012-02-18')

Resultado:
fecha1 es mayor

Código: [Seleccionar]
CALL ejemplo('2012-02-19','2012-02-20')

Resultado:
fecha2 es mayor

Pero evalua lo que mas te convenga.

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: SQL, comparar 2 fechas IF
« Respuesta #7 : febrero 18, 2012, 10:30:56 pm »
  • Necesitas terminar cada linea con ;

Para T-SQL es indiferente si la linea la termina con ; o no... igual te va a funcionar.

como no manejo mucho SQL, mas .NET pense que seria asi:

IF @fecha1 > @fecha2 THEN
@campo = 1
END IF

pero claro que no sera igual en las sintaxis ... intente ejecutarlo asi como lo muestro  xD obvio que me salto un error: sintaxis incorrecta cerca de la palabra clave THEN ....  se que es la misma idea pero diferentes sintaxis.. es en lo unico que me equivoco y en eso quisiera que me ayuden

Bueno si manejas .NET mejor, lo ideal siempre es utiizar en .NET la funcion de COMPARE de las extensiones de los tipos de datos DATE, o DATETIME:
http://msdn.microsoft.com/es-es/library/system.datetime.compare(v=vs.80).aspx


Bueno con respecto a tu pregunta, tienes un grave error en tu Sintaxis de Codigo... Mira la sintaxis de TSQL del IF..ELSE http://msdn.microsoft.com/es-es/library/ms182717.aspx. OjO, fijate solo lleva IF y ELSE. Siempre debes de tener mucho cuidado cuando agarras un nuevo lenguaje de programacion de leerte un poquito la sintaxis de TSQL porque lo querias hacer como VB.NET.

Si @Fecha1 y @Fecha2 los has declarado bn, son de tipo fecha y no hay problema en ese sentido tendrias que ponerlo asi:

Código: [Seleccionar]
IF (@fecha1 > @fecha2) SET @campo = 1
Si vas a necesitar agregar mas de una linea dentro del IF en TSQL existen los bloques BEGIN..END, esto indica un bloque dentro de una estructura de control. Si fueras a incluir mas cosas dentro del IF te quedaria asi:

Código: [Seleccionar]
IF (@fecha1 > @fecha2)
BEGIN
SET @campo = 1
(otras lineas).....
......
.....
END
ELSE
BEGIN
(lineas de ELSE)...
....
....
END

Eso es todo, recuerda, tener mucho cuidado en tu codigo si esta empezando a utilizar MSSQL, la MSDN te ayuda mucho si tiene alguna duda si tu sintaxis esta bn o mal..! Espero q te sirva, cualquier duda me dices..!
« Última Modificación: febrero 18, 2012, 10:36:07 pm por Juancho »
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado llAudioslavell

  • Sv Member
  • ***
  • Mensajes: 126
Re: SQL, comparar 2 fechas IF
« Respuesta #8 : febrero 20, 2012, 12:42:34 pm »
Para T-SQL es indiferente si la linea la termina con ; o no... igual te va a funcionar.

Bueno si manejas .NET mejor, lo ideal siempre es utiizar en .NET la funcion de COMPARE de las extensiones de los tipos de datos DATE, o DATETIME:
http://msdn.microsoft.com/es-es/library/system.datetime.compare(v=vs.80).aspx


Bueno con respecto a tu pregunta, tienes un grave error en tu Sintaxis de Codigo... Mira la sintaxis de TSQL del IF..ELSE http://msdn.microsoft.com/es-es/library/ms182717.aspx. OjO, fijate solo lleva IF y ELSE. Siempre debes de tener mucho cuidado cuando agarras un nuevo lenguaje de programacion de leerte un poquito la sintaxis de TSQL porque lo querias hacer como VB.NET.

Si @Fecha1 y @Fecha2 los has declarado bn, son de tipo fecha y no hay problema en ese sentido tendrias que ponerlo asi:

Código: [Seleccionar]
IF (@fecha1 > @fecha2) SET @campo = 1
Si vas a necesitar agregar mas de una linea dentro del IF en TSQL existen los bloques BEGIN..END, esto indica un bloque dentro de una estructura de control. Si fueras a incluir mas cosas dentro del IF te quedaria asi:

Código: [Seleccionar]
IF (@fecha1 > @fecha2)
BEGIN
SET @campo = 1
(otras lineas).....
......
.....
END
ELSE
BEGIN
(lineas de ELSE)...
....
....
END

Eso es todo, recuerda, tener mucho cuidado en tu codigo si esta empezando a utilizar MSSQL, la MSDN te ayuda mucho si tiene alguna duda si tu sintaxis esta bn o mal..! Espero q te sirva, cualquier duda me dices..!


Gracias hermano, ya soluccione mi problema y siguo avanzando mi sistema... !!
Gracias a todos !!