Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/01/2009, 21:57
DavidBD
 
Fecha de Ingreso: enero-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
Solucionado

En lo personal creo que sql server 2005 falla al no respetar el estàndar sql que especifica que debe de existir un tipo DATE y un tipo TIME por separado. En cambio, aglomera en un solo tipo ( datime o smalldatetime ) hora y fecha. También falla en no dar una función simple que sirva para este propósito específico que es tan necesario. Una función pequeña es una función màs eficiente. En este caso yo no necesito toda la potencia de una funciòn tan genèrica como DATEDIFF ( la cual devuelve la diferencia entre dos fechas, sòlo requiero saber si son iguales, o si una es mayor), asì que hice mi propia implementacion que regalo a quien la quiera usar:

El propòsito de esta función es comparar únicamente 2 fechas. Devuelve un 1 si la primera fecha es mayor, un -1 si la primera fecha es menor y un 0 si las fechas son iguales.

--
Código:
-- =============================================
-- Autor:		David Bernal Michelena 
-- Descripción:	Compara dos fechas, si la fecha1 es mayor devuelve un 1, si es menor devuelve un -1, si las fechas son iguales devuelve 0
-- =============================================
CREATE FUNCTION comparaFecha ( @fecha1 SMALLDATETIME, @fecha2 SMALLDATETIME )
RETURNS int
AS
BEGIN
	DECLARE @res int
  IF YEAR(@fecha1) > YEAR(@fecha2)	
     SET @res = 1
  ELSE
	IF YEAR (@fecha1) < YEAR(@fecha2)	
	SET @res =  -1
  ELSE -- AÑOS IGUALES
	IF MONTH(@fecha1) > MONTH(@fecha2)	
	SET @res =  1
	ELSE
	  IF MONTH(@fecha1) < MONTH(@fecha2)	
	  SET @res =  -1
	ELSE -- AÑOS Y MESES IGUALES
	  IF DAY(@fecha1) > DAY(@fecha2)
	  SET @res =  1
	  ELSE
		IF DAY(@fecha1) < DAY(@fecha2)
		SET @res =  -1
	  ELSE -- AÑOS, MESES Y DIAS IGUALES
		SET @res = 0
	RETURN @res
END
;
Para probar la funcion, usar el siguiente código:
Código:
DECLARE @fechaInicio SMALLDATETIME,
 @fechaFin SMALLDATETIME
SELECT @fechaInicio = '15/01/2009'
SELECT @fechaFin = '01/06/2009'
IF ( <usuario>.comparaFecha( @fechaInicio, @fechaFin) = 1)
	PRINT 'HAY UN ERROR'
ELSE
	PRINT 'CORRECTO, LA FECHA FINAL ES POSTERIOR O IGUAL A LA INICIAL'
En <usuario> deben de poner el nombre de usuario de la bd, si ponen sólo el nombre de la funcion, no funcionará.

Última edición por DavidBD; 09/02/2009 a las 18:43