Funciones numéricas

El nuevo Open SQL permite el uso de las siguientes funciones en las sentencias de lectura:

  • CAST

CAST( operand AS dtype )
CAST en Open SQL modifica el tipo de dato.  Es una expresión de conversión que convierte el valor del operando a un tipo de diccionario especificado por dtype. El resultado es una representación del valor fuente en tipo dtype. El operando puede ser una expresion SQL cuyo tipo coincida con dtype del diccionario de datos como se muestra a continuación:

  • Tipo numérico
  • INT1
  • INT2
  • INT4
  • INT8
  • DEC[( len[, decimals] )]
  • FLTP
  • Tipo char
  • CHAR[( len )]
  • SSTRING[( len )]
  • Tipo byte
  • RAW[( len )]
  • Tipo fecha/tiempo
  • DATS
  • TIMS
  • Tipos parecidos a caracteres con semántica especial
  • NUMC[( len )]
  • CLNT
  • LANG
  • Tipo importe y cantidad
  • CURR[( len[, decimals] )]
  • CUKY
  • QUAN[( len[, decimals] )]
  • UNIT( 2|3 )

 

  • DIVISION

DIVISION( arg1, arg2, dec )
La función DIVISION admite tres parámetros devolviendo como resultado la división de arg1 por arg2. El resultado se redondea al número de decimales especificado en el tercer parámetro dec.

  • DIV

DIV( arg1, arg2 )
La función devuelve el cociente del dividiendo arg1 y divisor agr2. Los tipos de datos admitidos como parámetros son INT1, INT2, INT4, INT8, DEC, CURR, y QUAN sin decimales.

  • MOD

MOD( arg1, arg2 )
La función devuelve el resto del dividiendo arg1 y divisor agr2. Los tipos de datos admitidos como parámetros son INT1, INT2, INT4, INT8, DEC, CURR, y QUAN sin decimales.

  • ABS

ABS( expr )
La función devuelve el valor absoluto de la expresión expr. Como argumentos válidos en la expresión admite todos los tipos numéricos excepto los números de punto flotante decimal.

  • CEIL

CEIL( expr )
La función devuelve el entero más pequeño que no es menor que el valor de la expresión. Los argumentos válidos son DEC, CURR y QUAN con decimales.

  • FLOOR

FLOOR( expr )
La función devuelve el entero más grande que no es mayor que el valor de la expresión. Los argumentos válidos son DEC, CURR y QUAN con decimales.

  • ROUND

ROUND( expr, pos )
La función redondea el valor de la expresión por los decimales indicados en el argumento de tipo entero pos. Como argumentos válidos en la expresión admite los tipos INT1, INT2, INT4, INT8, DEC, CURR y QUAN.

  • Ejemplo práctico

En un programa ejecutable declaramos las siguientes variables:

  • GV_OFFSET de tipo número entero con el valor 18
  • GV_DECIMAL de tipo P con 4 decimales y con el valor 27,0671

Realizamos una comprobación que verifica si en la tabla de base de datos estándar DEMO_EXPRESSIONS existe el registro con los valores 14 y 8 en las columnas NUM1 y NUM2. Si el registro no existe lo insertamos en la tabla. A continuación, seleccionamos el mismo registro con la instrucción SELECT en una estructura declarada en línea con @DATA. La estructura va a contener los siguientes componentes:

  • ID (Columna de la tabla)
  • NUM1 (Columna de la tabla)
  • NUM2 (Columna de la tabla)
  • RATIO (La división entre los valores del punto flotante de las columnas NUM1 y NUM2)
  • DIVISION (La división con dos decimales entre las columnas NUM1 y NUM2)
  • DIV (El cociente del dividiendo NUM1 y divisor NUM2)
  • MOD (El resto del dividiendo NUM1 y NUM2)
  • SUM (La suma entre los valores de las columnas NUM1, NUM2 y el valor de una variable GV_OFFSET)
  • ABS (El valor absoluto entre la resta de las columnas NUM1 y NUM2)
  • DECIMAL (El valor de la variable GV_DECIMAL
  • CEIL (El entero más pequeño de la variable GV_DECIMAL)
  • FLOOR (El entero más grande de la variable GV_DECIMAL)
  • ROUND (El valor de la variable GV_DECIMAL redondeado por dos decimales)

Por último, mostramos los resultados del SELECT en una ventana utilizando el método estático DISPLAY de la clase CL_DEMO_OUTPUT.
 
DATA(gv_offset) = 18.
DATA gv_decimal TYPE p LENGTH 13 DECIMALS 4 VALUE ‘27.0671’.
SELECT SINGLE FROM demo_expressions
FIELDS num1
  WHERE num1 EQ 14 AND num2 EQ 8
INTO @DATA(gv_num1).
 
IF sy-subrc NE 0.
  INSERT demo_expressions FROM @( VALUE #( num1 = 14 num2 = 8 ) ).
ENDIF.
 
SELECT SINGLE FROM demo_expressions
FIELDS id,
num1,
num2,
CAST( num1 AS FLTP ) / CAST( num2 AS FLTP ) AS ratio,
division( num1, num2, 2 ) AS division,
div( num1, num2 ) AS div,
mod( num1, num2 ) AS mod,
num1 + num2 + @gv_offset AS sum,
abs( num1 – num2 ) AS abs,
@gv_decimal AS decimal,
ceil( @gv_decimal ) AS ceil,
floor( @gv_decimal ) AS floor,
round( @gv_decimal, 2 ) AS round
  WHERE id   EQ @space
AND num1 EQ 14
AND num2 EQ 8
       INTO @DATA(gs_results).
IF sy-subrc EQ 0.
cl_demo_output=>display( gs_results ).
ENDIF.
 
Al ejecutar el programa obtenemos la siguiente salida:11
 

Deja una respuesta

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