Manipulando Fechas en Oracle: BETWEEN para dos columnas

Escrito por luiscordero29 | 27 abril, 2020 | SQL | Sin comentarios

Realizando unos cambios en un procedimiento de almacenado en ORACLE se presento que necesitaba realizar una inserción de una vista a una tabla con dos parametros de fechas (V_FECHA_INICIO, V_FECHA_FIN), la entrada de estas variable son del formato DD/MM/YY.

SELECT 			
FROM VW_STGO_HMQ_PAG HP
WHERE TRUNC(HP.FECHA_INICIO_PROCESO) = TO_DATE(REPLACE(V_FECHA_INICIO, '/', ''), 'DDMMYY') 
AND TRUNC(HP.FECHA_TERMINO_PROCESO) = TO_DATE(REPLACE(V_FECHA_FIN, '/', ''), 'DDMMYY');

Es claro que en el código original existe mas tablas involucradas junto al proceso de inserción a la tabla destino para luego realizar otros procedimientos dentro del sistema. Pero esto es solo uno de los casos que se presenta día tras día como programador.

El primer problema que nos enfrentamos es que el usuario del sistema para crear un proceso debe conocer cuales son las fechas inicio y fin, el cual no se encuentra disponible en el sistema. Entonces para conocer con exactitud los datos inicio y fin, realizamos la siguiente consulta.

Entonces para que pueda funcionar la query anterior el usuario en el sistema necesita ingresar la fecha de Inicio 13 de abril y la fecha fin como 19 de abril para obtener registros.

Pero en el sistema no se puede observar cuales fechas se encuentra disponible, por lo que el usuario debería crear múltiples procesos para llegar con el mismo resultado. Entonces podemos cambiar un poco la query para ocupar un rango de fechas dentro del mes de abril ocupado el mayor igual y menos igual.

De esta forma el usuario puede ingresar un rango de fechas y obtener una lista de registros en el proceso sin conocer fechas estimadas entre el inicio y fin del ejercicio. Esta query realiza su función, pero muchas veces necesitamos escribir un código que sea mas amigable a la vista y que sea mas fácil de entender lo que realice estas dos mejoras

  1. Dar un forma DD/MM/YYYY al formato de entrada
  2. Utilizar BETWEEN para cada uno de los campos
  3. Eliminar la función REPLACE
  4. Eliminar la función TRUNC

El código SQL seria el siguente:

SELECT 
	ID, 
	FECHA_INICIO_PROCESO, 
	FECHA_TERMINO_PROCESO			
FROM VW_STGO_HMQ_PAG
WHERE FECHA_INICIO_PROCESO BETWEEN TO_DATE('01/04/2020', 'DD/MM/YYYY') AND TO_DATE('30/04/2020', 'DD/MM/YYYY') 
	AND FECHA_TERMINO_PROCESO BETWEEN TO_DATE('01/04/2020', 'DD/MM/YYYY') AND TO_DATE('30/04/2020', 'DD/MM/YYYY') 

inserta tu comentario

Todos los comentarios se encuetran sujeto a moderación

Deja una respuesta