Saltar al contenido

Aprende Como Restar Fechas en PL-SQL Procedures en Oracle

PL-SQL Procedures en OracleSi aprendes como se deben Restar dos Fechas en los PL-SQL Procedures en Oracle podrás obtener la cantidad de días, horas, minutos y segundos que han transcurrido entre la primera fecha y la segunda fecha.

Para restar dos fechas primero se debe procurar que siempre la primera fecha sea mayor que la segunda fecha, de lo contrario, el resultado entregado no será el esperado.

En los PL-SQL Procedures en Oracle es muy fácil realizar operaciones con fechas, ya que solo aplicando algunas operaciones matemáticas básicas se pueden obtener los resultados deseados rápidamente.

Revisemos algunos ejemplos prácticos para que entiendas con mayor claridad como se deben restar fechas en los PL-SQL Procedures en Oracle.

Ejemplo #1: Supone que deseas obtener la cantidad de días trabajados durante el mes por un empleado, veamos como se hace:

/* PL-SQL Procedures en Oracle */

Ldt_primer_dia          date:= to_date(’01-03-2012’,’dd-mm-yyyy’);

Ldt_dia_actual           date:=  to_date(’22-03-2012’,’dd-mm-yyyy’);

Lin_dias_trabajados   number(3);

Begin

Lin_dias_trabajados         := (ldt_dia_actual – ldt_primer_dia);

End;

En este ejemplo se restan dos fechas, donde primero se coloca la fecha mayor (ldt_dia_actual) menos la fecha menor (ldt_primer_dia). El resultado de esta operación es 21 días, este resultado puede ser correcto dependiendo del contexto del PL-SQL Procedures en Oracle donde se aplique, para este caso asumiré que es un valor erróneo ya que necesito obtener 22 días como resultado, para corregir el problema se debe realizar lo siguiente:

/* PL-SQL Procedures en Oracle */

Lin_dias_trabajados         := (ldt_dia_actual – ldt_primer_dia) + 1;

A la operación se agrego que se sume 1 día para poder obtener como resultado los 22 días.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”

¡ Haz Clic Aquí y Descárgalo GRATIS Ahora !

Ejemplo #2: Supone ahora que deseas obtener las horas, minutos y segundos que ha trabajado el empleado, veamos como se hace:

/* PL-SQL Procedures en Oracle */

Select

((sysdate – mtra.primer_dia) + 1) dias,

((sysdate – mtra.primer_dia) + 1) * 24 horas,

((sysdate – mtra.primer_dia) + 1) * 24 * 60 minutos,

((sysdate – mtra.primer_dia) + 1) * 24 * 60 * 60 segundos

From t_mes_trabajado mtra

Where mtra.id_empleado = pin_id_empleado;

En este ejemplo las operaciones se realizan dentro de una consulta SELECT donde se utiliza la variable de sistema SYSDATE para obtener la fecha actual, luego se realizan las operaciones para obtener las horas, minutos y segundos que han transcurrido desde el primer día del mes hasta hoy (fecha actual).

La Base de Datos Oracle proporciona una serie de funciones que permiten manipular fechas para obtener distintos datos dentro de los PL-SQL Procedures en Oracle, revisaremos cada una de ellas en un nuevo artículo.

Te propongo que pruebes de inmediato estos ejemplos en tu Base de Datos con tus propias tablas, PL/SQL Procedure y PL/SQL Function, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL/SQL Procedures en Oracle.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL/SQL Procedures en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL/SQL Procedures en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Para Tu Éxito con Oracle.

Director del Curso “Domina Tus Packages En Oracle

16 comentarios en «Aprende Como Restar Fechas en PL-SQL Procedures en Oracle»

  1. yo necesito saber como hacer para comparar cuantas horas de diferencia hay entre dos fechas que se encuentran en mi tabla, en el comentario lo q hace es tomar dos fechas q ud mismo le setea, pero yo lo que quiero es sacar la fecha1(campo de mi tabla) y de ahi compararlo con fecha2(otro campo de la misma tabla perteneciente al mismo id de la tabla).

    1. Hola Meche, gracias por comunicarte, en el ejemplo #2 muestro como restar fechas de una tabla, pero tu puedes hacer algo como lo siguiente:

      select (((dat.tu_fecha_mayor – dat.tu_fecha_menor) + 1) * 24) total_horas
      from tu_tabla dat
      where tu_id = 123;

      PD: Ya obtuviste mi reporte gratuito de ‘Cómo Construir un Select Eficiente en Oracle en Solo 7 Pasos’, si aún no lo has hecho puedes descargarlo desde aquí:
      https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  2. bueno mira yo tengo que hacer un select donde si yo he dado iniciar en un boton se grabe la fecha en que le dio click pero ya al dia siguiente me le tiene que descontar un dia hasta que llegue a 3 dias que es el limite….

    1. Hola Carol, gracias por comunicarte, no entiendo muy bien tu pregunta, pero si quieres grabar una fecha debes usar un insert o un update, si debes restar un día debes hacer un update de esta forma:

      update tu_tabla
      set campo_fecha= (campo_fecha – 1)
      where

      PD: Ya obtuviste mi libro gratis sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo haces puedes obtenerlo desde aquí:
      https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

    1. Hola Miguel, gracias por comunicarte, si entras a la página https://dominatuspackagesen0racle.com/select/video_1/ y el vídeo no se muestra debes actualizar la versión de Adobe Flash Player en tu navegador, entra al siguiente enlace https://get.adobe.com/es/flashplayer/ y sigue las indicaciones que están en español, por favor cuéntame si se solucionó en problema, gracias.

      PD: No olvides dejarme tus comentarios al final de los vídeos y si te gustaron los vídeos comparte el enlace del vídeo con tus amigos o personas que también les pueda interesar.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  3. BUEN DIA, POR FAVOR QUIERO HACER UN TRIGGER PARA VALIDAR LA FECHA DE NACIMIENTO COMO PUEDO HACER LA LOGICA X FAVOR….

    CREATE OR REPLACE TRIGGER validar_edad
    BEFORE INSERT OR UPDATE OF fechanac_per on persona
    FOR EACH ROW
    DECLARE
    v_minedad date := 121296;
    begin
    IF(:new.fechanac_per > (sysdate-6205)from dual)THEN
    raise_application_error (-20725,’EL PASAJERO ES MENOR DE EDAD’);
    END IF;
    END;

    1. Hola Nelson, gracias por comunicarte, creo que la lógica la estas aplicando bien solo tienes un problema en el if donde debes hacer lo siguiente:
      — se obtiene la edad mínima —
      select (sysdate-6205) into v_minedad from dual;
      IF (:new.fechanac_per > v_minedad) THEN

      PD: Ya obtuviste mi libro-reporte gratis sobre “Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aun no lo tienes puedes obtenerlo desde el enlace https://dominatuspackagesen0racle.com/, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  4. Buenos días: Yo tengo una duda cual es la diferencia de un simple plsql y un procedimiento o un paquete, más alla que los dos últimos son objetos de base de datos y el primero no.

    Lilliana

    1. Hola Liliana, gracias por comunicarte, bueno creo que a nivel de código no hay diferencias, la diferencia esta en lo simple así como lo dices, ya que un simple plsql puede contener tal vez un update, insert, delete o un select para procesar algunos datos, mientras que un procedimiento o paquete están diseñados para procesar grandes cantidades de datos, contienen cursores, estructuras, cálculos, lógica de negocio, files, control de errores, reportes, logs, etc.

      PD: Si te ha gustado el blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda ser útil este contenido, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

    1. Que tal Edgar, gracias por tu comentario, me da mucho gusto que esta información te sea de utilidad, si te ha gustado el blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar este contenido, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  5. Quisiera saber como sacar rangos por minutos, ejemplo tengo una data relacionada con registros de compras los cuales tienen sus montos por productos y cada una con sus respectivos fecha y hora de compra, lo que necesito es mostrar esos registro en rangos de 15 minutos para que me muestre todos los registros comprendidos dentro de ese rango, hice esta pequeña linea de codigo en el select:
    H.FECHA >= TO_DATE(’03/03/2014 DD/MM/YYYY’,’09:00:00 HH24:MI:SS’) AND H.FECHA <= TO_DATE('03/03/2014 DD/MM/YYYY','09:15:00 HH24:MI:SS')
    pero no me funcionó, asi que precedí a ponerla en el where con un between, pero si lo pongo en el where tendria que estar corriendo como 60 veces mi qry para sacar todos los rangos hasta las 23:59:00 y seria muy tedioso como comprenderas.
    Te agradeceria mucho me respondieras mi comentario Gracias de antemano

    1. Hola Miguel, gracias por comunicarte, no se entiende muy bien como quieres mostrar esos registros en rangos de 15 minutos, pero si quieres hacerlo todo en un solo query puedes hacer lo siguiente, obtén en un campo la hora to_char(fecha,’hh24:mi:ss’), luego ordenas la query por ese campo de hora y con un decode mostrar un mensaje que muestre los 15 minutos, ej. decode(to_char(fecha,’mi’),’15’,’15 minutos’,’ ‘).

      PD: Ya pudiste ver mi libro-reporte sobre ‘Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos’, si aún no lo tienes en tus manos puedes obtenerlo desde aquí: https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

    1. Hola Alvaro, gracias por comunicarte, me da mucho gusto ver que este artículo te sea de utilidad, si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.