Sv Community El Salvador
Soporte y Tecnología => Programación => Base de Datos => Topic started by: llAudioslavell on February 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: !
-
¿Datediff no te servira?
Aqui podes ver la sintaxis para SQL SERVER.
http://technet.microsoft.com/es-es/library/ms139927.aspx (http://technet.microsoft.com/es-es/library/ms139927.aspx)
-
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.
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.
-
¿Datediff no te servira?
Aqui podes ver la sintaxis para SQL SERVER.
http://technet.microsoft.com/es-es/library/ms139927.aspx (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 ....
-
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.
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
-
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
IF @fecha1 <> @fecha2 THEN
@campo = 1;
END IF;
O de este otro
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.
-
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]
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..
CALL ejemplo('2012-02-18','2012-02-18')
Resultado:
SON IGUALES
CALL ejemplo('2012-02-19','2012-02-18')
Resultado:
fecha1 es mayor
CALL ejemplo('2012-02-19','2012-02-20')
Resultado:
fecha2 es mayor
Pero evalua lo que mas te convenga.
-
- 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 (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:
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:
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..!
-
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 (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:
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:
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 !!