Función escalar ROUND
La función ROUND devuelve un valor redondeado de un valor numérico o de hora y fecha:
ROUND numérico
ROUND fecha-hora
El esquema es SYSIBM. La versión SYSFUN de la función numérica ROUND sigue estando disponible.
- Si el resultado del primer argumento es un valor numérico, las funciones ROUND devuelven un número, redondeado truncado en el número de posiciones especificado, a la derecha o izquierda de la coma decimal.
- Si el primer argumento es DATE, TIME o TIMESTAMP, las funciones ROUND devuelven un valor de fecha y hora, redondeado a la unidad especificada por una serie-formato.
- ROUND numérico
Si expresión-numérica-1 es un valor positivo, un dígito con el valor 5 o un valor superior indica que se redondeará al número positivo siguiente. Por ejemplo, ROUND(3.5,0) = 4. Si expresión-numérica-1 es un valor negativo, un dígito con el valor 5 o superior es una indicación para redondear al número negativo anterior. Por ejemplo, ROUND(-3.5,0) = -4.
- numeric-expression1
- Una expresión que debe devolver un valor que sea un tipo de datos numérico o CHAR, VARCHAR, GRAPHIC o VARGRAPHIC incorporado. Si el valor no es un tipo de datos numérico, se convierte de forma implícita en DECFLOAT(34) antes de evaluar la función.
Si la expresión es un tipo de datos de coma flotante decimal, la modalidad de redondeo DECFLOAT no se utilizará. El comportamiento de redondeo de ROUND corresponde a un valor de ROUND_HALF_UP. Si se desea otro comportamiento de redondeo, utilice la función QUANTIZE.
- numeric-expression2
- Expresión que devuelve un valor que es un tipo de datos numérico incorporado. Si el valor no es del tipo INTEGER, se convierte de forma implícita en INTEGER antes de evaluar la función.
Si expresión-numérica-2 no es negativa, expresión-numérica-1 se redondea al valor absoluto de expresión-numérica-2 posiciones a la derecha de la coma decimal.
Si expresión-numérica-2 es negativa, expresión-numérica-1 se redondea al valor absoluto de expresión-numérica-2+1 número de posiciones a la izquierda de la coma decimal.
Si el valor absoluto de una expresión-numérica2 negativa es mayor que el número de dígitos a la izquierda del separador decimal, el resultado es 0. Por ejemplo, ROUND(748,58,-4) = 0. Si numeric-expression1 es positivo, un valor de dígito de 5 se redondea al siguiente número positivo más alto. Si expresión-numérica-1 es un valor negativo, un dígito con el valor 5 se redondeará al número negativo anterior.
El tipo de datos y el atributo de longitud del resultado coinciden con el tipo de datos y el atributo de longitud del primer argumento, con la excepción de que la precisión aumenta en uno si expresión-numérica-1 es DECIMAL y la precisión es menor que 31. Por ejemplo, un argumento con un tipo de datos de DECIMAL(5,2) da como resultado DECIMAL(6,2). Un argumento con un tipo de datos de DECIMAL(31,2) da como resultado DECIMAL(31,2). La escala es igual que la escala del primer argumento.
Si cualquiera de los argumentos puede ser nulo o si el argumento no es un número de coma flotante decimal y la base de datos se ha configurado con dft_sqlmathwarn establecido en YES, el resultado puede ser nulo. Si cualquiera de los argumentos es nulo, el resultado es el valor nulo.
Esta función no queda afectada por el valor del registro especial CURRENT DECFLOAT ROUNDING MODE, incluso para argumentos de coma flotante decimal. El comportamiento de redondeo de ROUND corresponde a un valor de ROUND_HALF_UP. Si para un valor de coma flotante decimal desea un comportamiento que se ajuste a la modalidad de redondeo especificada por el registro especial CURRENT DECFLOAT ROUNDING MODE, utilice la función QUANTIZE en su lugar.
- ROUND datetime
- Si expresión-fecha-hora tiene un tipo de datos de fecha y hora, la función ROUND devuelve expresión-fecha-hora redondeada a la unidad especificada por la serie-formato. Si no se especifica serie-formato, expresión-fecha-hora se redondea al día más cercano, como si se especificara 'DD' para serie-formato.
- expresión-fecha-hora
- Una expresión que debe devolver un valor que sea una fecha, una hora o una indicación de fecha y hora. Las representaciones de serie de estos tipos de datos no reciben soporte y deben convertirse explícitamente en un valor DATE, TIME o TIMESTAMP para poder utilizarlas con esta función; de forma alternativa, puede utilizar la función ROUND_TIMESTAMP para una representación de serie de una fecha o indicación de fecha y hora.
- serie-formato
- Una expresión que devuelve un tipo de datos de serie de caracteres incorporado con una longitud real que no es superior a 255 bytes. El elemento de formato de serie-formato especifica cómo debe redondearse expresión-fecha-hora. Por ejemplo, si serie-formato es 'DD', una indicación de fecha y hora que se represente mediante una expresión-fecha-hora se redondea al día más cercano. Los espacios en blanco iniciales y finales se eliminan de la serie y la subserie resultante debe ser un elemento de formato válido para el tipo de expresión-fecha-hora (SQLSTATE 22007). El valor predeterminado es 'DD', que no se puede utilizar si el tipo de datos de expresión-fecha-hora es TIME.
Los valores permitidos para serie-formato se listan en la tabla de elementos de formato listados en la Tabla 1.
- nombre-entorno-local
- Constante de caracteres que especifica el entorno local que se utiliza para determinar el primer día de la semana cuando se utilizan valores de elemento de formato DAY, DY o D. El valor de nombre-entorno-local no es sensible a las mayúsculas y minúsculas y debe ser un entorno local válido (SQLSTATE 42815). Para obtener información sobre los entornos locales válidos y sus nombres, consulte la sección
Nombres de entorno local para SQL y XQuery
. Si no se especifica nombre-entorno-local, se utiliza el valor del registro especial CURRENT LOCALE LC_TIME.
Los elementos de formato siguientes se utilizan para identificar la unidad de redondeo o truncamiento del valor de fecha y hora en las funciones ROUND, ROUND_TIMESTAMP, TRUNCATE y TRUNC_TIMESTAMP.
Tabla 1. Elementos de formato para ROUND, ROUND_TIMESTAMP, TRUNCATE y TRUNC_TIMESTAMP Elemento de formato Unidad de redondeo o truncamiento Ejemplo de ROUND Ejemplo de TRUNCATE CC
SCCSiglo Redondea hasta el inicio del siglo siguiente a partir del año 50 del siglo (por ejemplo, 1951-01-01-00.00.00).
No es válido para el argumento TIME.
Valor de entrada:
1897-12-04-12.22.22.000000Resultado:
1901-01-01-00.00.00.000000Valor de entrada:
1897-12-04-12.22.22.000000Resultado:
1801-01-01-00.00.00.000000SYYYY
YYYY
YEAR
SYEAR
YYY
YY
YAño Redondea a partir del 1 de julio al 1 de enero del año siguiente.
No es válido para el argumento TIME.
Valor de entrada:
1897-12-04-12.22.22.000000Resultado:
1898-01-01-00.00.00.000000Valor de entrada:
1897-12-04-12.22.22.000000Resultado:
1897-01-01-00.00.00.000000IYYY
IYY
IY
IAño ISO Redondea a partir del 1 de julio al primer día del año ISO siguiente. El primer día del año ISO es el lunes de la primera semana ISO.
No es válido para el argumento TIME.
Valor de entrada:
1897-12-04-12.22.22.000000Resultado:
1898-01-03-00.00.00.000000Valor de entrada:
1897-12-04-12.22.22.000000Resultado:
1897-01-04-00.00.00.000000Q Trimestre Redondea a partir del día 16 del segundo mes del trimestre.
No es válido para el argumento TIME.
Valor de entrada:
1999-06-04-12.12.30.000000Resultado:
1999-07-01-00.00.00.000000Valor de entrada:
1999-06-04-12.12.30.000000Resultado:
1999-04-01-00.00.00.000000MONTH
MON
MM
RMMes Redondea a partir del día 16 del mes.
No es válido para el argumento TIME.
Valor de entrada:
1999-06-18-12.12.30.000000Resultado:
1999-07-01-00.00.00.000000Valor de entrada:
1999-06-18-12.12.30.000000Resultado:
1999-06-01-00.00.00.000000WW Mismo día de la semana que el primer día del año. Redondea a partir de las 12 horas del cuarto día de la semana con respecto al primer día del año.
No es válido para el argumento TIME.
Valor de entrada:
2000-05-05-12.12.30.000000Resultado:
2000-05-06-00.00.00.000000Valor de entrada:
2000-05-05-12.12.30.000000Resultado:
2000-04-29-00.00.00.000000IW Mismo día de la semana que el primer día del año ISO. Consulte Función escalar WEEK_ISO
para obtener más detalles.Redondea a partir de las 12 horas del cuarto día de la semana con respecto al primer día del año ISO.
No es válido para el argumento TIME.
Valor de entrada:
2000-05-05-12.12.30.000000Resultado:
2000-05-08-00.00.00.000000Valor de entrada:
2000-05-05-12.12.30.000000Resultado:
2000-05-01-00.00.00.000000W Mismo día de la semana que el primer día del año. Redondea a partir de las 12 horas del cuarto día de la semana con respecto al primer día del mes.
No es válido para el argumento TIME.
Valor de entrada:
2000-06-21-12.12.30.000000Resultado:
2000-06-22-00.00.00.000000Valor de entrada:
2000-06-21-12.12.30.000000Resultado:
2000-06-15-00.00.00.000000DDD
DD
JDía Redondea a partir de las 12 horas del día.
No es válido para el argumento TIME.
Valor de entrada:
2000-05-17-12.59.59.000000Resultado:
2000-05-18-00.00.00.000000Valor de entrada:
2000-05-17-12.59.59.000000Resultado:
2000-05-17-00.00.00.000000DAY
DY
DPrimer día de la semana. Redondea con respecto a las 12 horas del cuarto día de la semana. El primer día de la semana depende del entorno local (vea el nombre-entorno-local).
No es válido para el argumento TIME.
Valor de entrada:
2000-05-17-12.59.59.000000Resultado:
2000-05-21-00.00.00.000000Valor de entrada:
2000-05-17-12.59.59.000000Resultado:
2000-05-14-00.00.00.000000HH
HH12
HH24Hora Redondea a partir del minuto 30.
Valor de entrada:
2000-05-17-23.59.59.000000Resultado:
2000-05-18-00.00.00.000000Valor de entrada:
2000-05-17-23.59.59.000000Resultado:
2000-05-17-23.00.00.000000MI Minute Redondea a partir del segundo 30.
Valor de entrada:
2000-05-17-23.58.45.000000Resultado:
2000-05-17-23.59.00.000000Valor de entrada:
2000-05-17-23.58.45.000000Resultado:
2000-05-17-23.58.00.000000SS Second Redondea a partir de medio segundo.
Valor de entrada:
2000-05-17-23.58.45.500000Resultado:
2000-05-17-23.58.46.000000Valor de entrada:
2000-05-17-23.58.45.500000Resultado:
2000-05-17-23.58.45.000000Nota: Los elementos de formato de la Tabla 1 deben especificarse en mayúsculas.Si para un argumento de fecha se especifica un elemento de formato que se aplica a la parte de hora de un valor, el argumento de fecha se devuelve sin cambios. Si para un argumento de hora se especifica un elemento de formato que no es válido para este tipo de argumento, se devuelve un error (SQLSTATE 22007).
Notas
- Determinismo: ROUND es una función determinista. Sin embargo, las invocaciones siguientes de la función dependen del valor del registro especial CURRENT LOCALE LC_TIME.
- Redondeo de un valor de fecha y hora cuando no se especifica explícitamente nombre-entorno-local y cuando una de las afirmaciones siguientes es verdadera:
- serie-formato no es una constante
- serie-formato es una constante e incluye elementos de formato que son sensibles al entorno local
- Redondeo de un valor de fecha y hora cuando no se especifica explícitamente nombre-entorno-local y cuando una de las afirmaciones siguientes es verdadera:
ejemplos
- Ejemplo 1: Calcule el valor de 873.726, redondeado a 2, 1, 0, -1, -2, -3 y -4 posiciones decimales, respectivamente.
Este ejemplo devuelve:VALUES ( ROUND(873.726, 2), ROUND(873.726, 1), ROUND(873.726, 0), ROUND(873.726,-1), ROUND(873.726,-2), ROUND(873.726,-3), ROUND(873.726,-4) )1 2 3 4 5 6 7 --------- --------- --------- --------- --------- --------- --------- 873.730 873.700 874.000 870.000 900.000 1000.000 0.000 - Ejemplo 2: realizar el cálculo utilizando números positivos y negativos.
Este ejemplo devuelve:VALUES ( ROUND(3.5, 0), ROUND(3.1, 0), ROUND(-3.1, 0), ROUND(-3.5,0) )1 2 3 4 ---- ---- ---- ---- 4.0 3.0 -3.0 -4.0 - Ejemplo 3: Calcule el número de coma flotante decimal 3.12350 redondeado a tres decimales.
Este ejemplo devuelve:VALUES ( ROUND(DECFLOAT('3.12350'), 3))1 ----- 3.12400 - Ejemplo 4: Establezca la variable del lenguaje principal RND_DT con la fecha de entrada redondeada al valor de mes más cercano.
El valor establecido es 2000-09-01.SET :RND_DATE = ROUND(DATE('2000-08-16'), 'MONTH'); - Ejemplo 5: Establezca la variable del lenguaje principal RND_TMSTMP con la indicación de fecha y hora de entrada redondeada al valor de año más cercano.
El valor establecido es 2001-01-01-00.00.00.000000.SET :RND_TMSTMP = ROUND(TIMESTAMP('2000-08-14-17.30.00'), 'YEAR');
