Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

dias entre dos fechas Oracle

Estas en el tema de dias entre dos fechas Oracle en el foro de Oracle en Foros del Web. Hola menejo orale 10 , TOAD Y SQL NAVIGATOR 3.1 necesito saber como sacar la diferencia entre 2 fechas osea los dias pero sin contar ...
  #1 (permalink)  
Antiguo 25/10/2007, 19:32
 
Fecha de Ingreso: octubre-2007
Mensajes: 4
Antigüedad: 17 años
Puntos: 0
dias entre dos fechas Oracle

Hola
menejo orale 10 , TOAD Y SQL NAVIGATOR 3.1 necesito saber como sacar la diferencia entre 2 fechas osea los dias pero sin contar Sabados y Domingos
ya que he copiado codigos de esta pagina pero a la hora de ejecutar un PROCEDURE o un FUNCTION y la palabra RETURNS me manda errores, que debo de hacer ya que apenas me voy iniciando en Oracle
Saludos
  #2 (permalink)  
Antiguo 26/10/2007, 00:56
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Re: dias entre dos fechas Oracle

¿ y si pones algo del codigo pl pa ver donde esta el error ?, ten en cuenta que el teclado no se gasta, así que da detalles, majete.

Otra cosa, en las FUNCTIONS no es returns, es RETURN
  #3 (permalink)  
Antiguo 26/10/2007, 07:57
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 8 meses
Puntos: 7
Re: dias entre dos fechas Oracle

no sera por que "RETURNS" es "RETURN"?
__________________
Blogzote.com :-) Mi blog
  #4 (permalink)  
Antiguo 31/10/2007, 15:20
 
Fecha de Ingreso: octubre-2007
Mensajes: 4
Antigüedad: 17 años
Puntos: 0
Re: dias entre dos fechas Oracle

aqui esta el codigo que estoy manejando y si viene como Returns, lo intente con return y sigue el problema majetes:
el que es bueno no necesita ver el codigo solo es la diferencia de dos fechas sin contar sabados y domingos:

CREATE FUNCTION DifDias(@StartDate DATETIME,@EndDate DATETIME)
RETURNS integer
AS
Begin

//Con esta variable calculamos cuantos dias "normales" hay en el rango de fechas

DECLARE @DaysBetween INT

//Con esta variable acumulamos los dias totales

DECLARE @BusinessDays INT

//esta variable nos sirve de contador para saber cuando lleguemos al ultimo dia del rango

DECLARE @Cnt INT

/*esta variable es la que comparamos para saber si el dia que esta calculando es sábado o domingo*/

DECLARE @EvalDate DATETIME

/*Esta par de variables sirven para comparar las dos fechas, si son iguales, la funcion nos regresa un 0*/

DECLARE @ini VARCHAR(10)
DECLARE @fin VARCHAR(10)

//Inicializamos algunas variables

SELECT @DaysBetween = 0
SELECT @BusinessDays = 0
SELECT @Cnt=0

//Calculamos cuantos dias normales hay en el rango de fechas

SELECT @DaysBetween = DATEDIFF(DAY,@StartDate,@EndDate) + 1

/*Ordenamos el formato de las fechas para que no importando como se proporcionen se comparen igual*/

SELECT @ini = (SELECT CAST((CAST(datepart(dd,@StartDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@StartDate)AS
VARCHAR(2))+'/'+CAST(datepart(yy,@StartDate)AS VARCHAR(4))) as
varchar(10)))
SELECT @fin = (SELECT CAST((CAST(datepart(dd,@EndDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@EndDate)AS VARCHAR(2))+'/'+
CAST(datepart(yy,@EndDate)AS VARCHAR(4)))as varchar(10)))

//Se comparan las dos fechas

IF @ini <>@fin
BEGIN

/*Si la diferencia de fechas es igual a dos, es porque solo ha transcurrido un dia, asi que solo se valida que no vaya a marcar dias de mas*/

IF @DaysBetween = 2
BEGIN
SELECT @BusinessDays = 1
END
ELSE
BEGIN
WHILE @Cnt < @DaysBetween
BEGIN

/*Se Iguala la fecha a que vamos a calcular para saber si es sabado o domingo en la variable @EvalDate sumandole los dias que marque el contador, el cual no debe ser mayor que el numero total de dias que hay en el rango de fechas*/

SELECT @EvalDate = @StartDate + @Cnt

/*Utilizando la funcion datepart con el parametro dw que calcula que dia de la semana corresponde una fecha determinada, determinados que no sea sabado (7) o domingo (1)*/

IF ((datepart(dw,@EvalDate) <> 1) and
(datepart(dw,@EvalDate) <> 7) )
BEGIN

/*Si no es sabado o domingo, entonces se suma uno al total de dias que queremos desplegar*/

SELECT @BusinessDays = @BusinessDays + 1
END

//Se suma un dia mas al contador

SELECT @Cnt = @Cnt + 1
END
END
END
ELSE
BEGIN

//Si fuese cierto que las fechas eran iguales se despliegue cero

SELECT @BusinessDays = 0
END

//Al finalizar el ciclo, la funcion regresa el numero total de dias

return (@BusinessDays)
END


o bien dime si hay una forma mas facil por favor
  #5 (permalink)  
Antiguo 01/11/2007, 15:47
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: dias entre dos fechas Oracle

Hola,

Se me ocurre que podrias postear el codigo PL/SQL de Oracle, no el T-SQL que es de Microsoft SQL Server, o bien, preguntar en el foro vecino.

Pd, queda explicado el porque del RETURNS :)

Saludos.
  #6 (permalink)  
Antiguo 01/11/2007, 16:38
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: dias entre dos fechas Oracle

Hola,

A ver que tal va esto...

Código:
CREATE OR REPLACE FUNCTION days(p_from_date IN DATE, p_to_date IN DATE)
   RETURN NUMBER IS
b_days NUMBER;
BEGIN

  b_days := TRUNC(p_to_date) - TRUNC(p_from_date)  
       - ((TRUNC(p_to_date,'D')-TRUNC(to_date(p_from_date),'D'))/7)*2
       + 1;

  IF TO_CHAR(p_to_date,'D') = '7' THEN
    b_days := b_days - 1;
  END IF;

  IF TO_CHAR(p_from_date,'D') = '1' THEN
    b_days := b_days - 1;
  END IF;
  RETURN(b_days);

END;
/

Function created.

SQL> select days(to_date('01/11/2007','dd/mm/yyyy'),to_date('06/11/2007','dd/mm/yyyy')) from dual;

DAYS(TO_DATE('01/11/2007','DD/MM/YYYY'),TO_DATE('06/11/2007','DD/MM/YYYY'))
---------------------------------------------------------------------------
                                                                          4
Hay 6 dias entre las dos fechas y un fin de semana.

Referencia: Oracle Resource Stop.

Saludos
  #7 (permalink)  
Antiguo 22/12/2008, 08:46
 
Fecha de Ingreso: diciembre-2008
Mensajes: 2
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: dias entre dos fechas Oracle

Compadre yo hice una funcion hace mucho que hace eso

se la agrego:

CREATE OR REPLACE FUNCTION FCW_FDS
(FECHAINICIO IN Date,FECHAFIN IN DATE
)
RETURN NUMBER
IS
BEGIN
BEGIN
DECLARE
cod Nvarchar2(10);
t NUMBER;
diasfds number;
BEGIN
diasfds:=0;
t:=(FECHAFIN-FECHAINICIO);
for p in 0..t loop
cod:=to_char(fechainicio+p,'Day');
if(upper(trim(cod)) like 'S%') or (cod like 'D%')then
diasfds:=diasfds+1;
end if;
end loop;
RETURN(diasfds);
EXCEPTION
WHEN OTHERS THEN
RETURN(-1);
END;
END;
END FCW_FDS;

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:16.