El nuevo Open SQL permite el uso de las siguientes funciones para trabajar con las fechas en las sentencias de lectura:
- DATS_IS_VALID
DATS_IS_VALID( date )
La función DATS_IS_VALID comprueba si el parámetro date contiene una fecha válida en el formato AAAAMMDD. Para una fecha válida la función devuelve el valor 1 y para todos los demás valores (incluido el valor nulo) devuelve el valor 0.
Por ejemplo, el valor “00010101” es una fecha válida, mientras que el valor “00000000” no lo es.
- DATS_DAYS_BETWEEN
DATS_DAYS_BETWEEN( date1,date2 )
La función DATS_DAYS_BETWEEN calcula la diferencia entre dos fechas especificadas, date1 y date2, en días. Los parámetros deben tener el tipo de datos predefinidos DATS y deben contener una fecha válida en el formato AAAAMMDD. Cualquier fecha no válida especificada se inicializa o se establece en el valor “00010101” antes del cálculo. El resultado tiene el tipo de datos INT4. Si date2 es mayor que date1, el resultado es positivo. En el caso inverso, es negativo.
Antes de calcular la diferencia, las fechas especificadas se convierten en enteros, como en ABAP, y se aplican las reglas correspondientes.
- DATS_ADD_DAYS
DATS_ADD_DAYS( date, days )
La función DATS_ADD_DAYS agrega días a una fecha especificada en el parámetro date.
La fecha del parámetro real debe tener el tipo de datos predefinidos DATS y debe contener una fecha válida en el formato AAAAMMDD. Cualquier fecha no válida especificada se inicializa o se establece en el valor “00010101” antes del cálculo.
Los días reales del parámetro deben tener el tipo de datos predefinido INT4.
El resultado tiene el tipo de datos DATS. Si los días son positivos, la cantidad de días se agrega a la fecha. En otros casos, se resta el número de días. Si el cálculo produce una fecha no válida, el valor inicial se restablece.
Para el cálculo, la fecha especificada se convierte en un número entero, como en ABAP, y el resultado se convierte nuevamente en una fecha al aplicar las reglas correspondientes.
- DATS_ADD_MONTHS
DATS_ADD_MONTHS( date,months )
La función DATS_ADD_MONTHS agrega meses a una fecha especificada. La fecha del parámetro date debe tener el tipo de datos predefinidos DATS y debe contener una fecha válida en el formato AAAAMMDD. Cualquier fecha no válida especificada se inicializa o se establece en el valor “00010101” antes del cálculo.
Los meses del parámetro months deben tener el tipo de datos predefinido INT4.
El resultado tiene el tipo de datos DATS. Si months es positivo, se agrega el número de meses hasta la fecha. En otros casos, se resta la cantidad de meses.
La función intenta crear una fecha con el mismo día en un mes anterior o posterior. Si se excede el día máximo posible en un mes, se usa el día más grande posible. Si el cálculo produce una fecha no válida, el valor inicial se restablece.
- Ejemplo práctico
En un programa ejecutable realizamos una comprobación que verifica si en la tabla de base de datos estándar DEMO_EXPRESSIONS existe el registro con el valor ‘F’ en la columna ID. Si el registro no existe lo insertamos en la tabla añadiendo las fechas 29.03.2023 y 29.03.2025 en las columnas DATS1 y DATS2. A continuación, seleccionamos el mismo registro con la instrucción SELECT en una estructura declarada en línea con @DATA que va a contener los siguientes componentes:
- ID (Columna de la tabla)
- DATS1 (Columna de la tabla)
- DATS2 (Columna de la tabla)
- VALID (Comprueba si el valor de la columna DATS1 es una fecha válida)
- DAYS_BETWEEN (Devuelve los días entre las fechas de las columnas DATS1 Y DATS2)
- ADD_DAYS (La fecha con 30 días posteriores a la fecha de la columna DATS1)
- ADD_MONTHS (La fecha con dos meses anteriores a la fecha de la columna DATS1)
Por último, mostramos los resultados del SELECT en una ventana utilizando el método estático DISPLAY de la clase CL_DEMO_OUTPUT.
Al ejecutar el programa obtenemos la siguiente salida: