Función escalar DECIMAL o DEC
La función DECIMAL devuelve una representación decimal de un número, una representación de serie de un número o un valor de fecha y hora
Numérico a DECIMAL
Serie a DECIMAL
Fecha y hora a DECIMAL
El esquema es SYSIBM.
- Numérico a DECIMAL
-
- expresión-numérica
- Expresión que devuelve un valor de cualquier tipo de datos numérico incorporado.
- precisión
- Constante de entero con un valor en el rango 1-31. La precisión predeterminada
depende del tipo de datos de la expresión de entrada:
- 31 para coma flotante decimal (DECFLOAT)
- 15 para coma flotante (REAL o DOUBLE) o decimal (DECIMAL)
- 19 para entero superior (BIGINT)
- 11 para entero grande (INTEGER)
- 5 para entero pequeño (SMALLINT)
- escala
- Una constante de entero con un valor entre 0 y el valor de precisión. El valor predeterminado es cero.
El resultado es el mismo número que se generaría si el primer argumento se asignara a una columna o variable decimal con una precisión con el valor precisión y una escala con el valor escala. Los dígitos se truncan al final del número decimal si el número de dígitos a la derecha del carácter separador de decimales es superior al valor de escala. Se devuelve un error si el número de dígitos decimales significativos necesarios para representar la parte entera del número es superior al valor de precisión - escala (SQLSTATE 22003).
- Serie a DECIMAL
-
- expresión-serie
- Una expresión que devuelve un valor que es una serie de caracteres o una representación de serie gráfica Unicode de un número
con una longitud no superior a la longitud máxima de una constante de caracteres. El tipo de datos de expresión-serie no debe ser CLOB o DBCLOB (SQLSTATE 42884). Los espacios en blanco iniciales y finales se eliminan de la serie y la serie
resultante debe ajustarse a las normas para formar una constante de entero, decimal, de coma flotante o de coma flotante decimal (SQLSTATE 22018).
La expresión-serie se convierte a la página de códigos de la sección si es necesario para que coincida con la página de códigos del carácter-decimal de la constante.
- precisión
- Una constante de enteros con un valor en el rango de 1 a 31 que especifica la precisión del resultado. Si no se especifica, el valor por omisión es 15.
- escala
- Una constante de enteros con un valor en el rango de 0 a precisión que especifica la escala del resultado. Si no se especifica, el valor por omisión es 0.
- carácter-decimal
- Especifica la constante de caracteres de un solo byte utilizada para delimitar los dígitos decimales en expresión-serie de la parte correspondiente a los enteros del número. El carácter no puede ser un dígito, el signo más (+), el signo menos (-) ni un espacio en blanco y puede aparecer como máximo una vez en expresión-caracteres (SQLSTATE 42815).
El resultado es el mismo número que generaría CAST(expresión-serie AS DECIMAL(precisión, escala)). Los dígitos se truncan al final del número decimal si el número de dígitos a la derecha del carácter separador de decimales es superior al valor de escala. Se devuelve un error si el número de dígitos significativos a la izquierda del carácter decimal (la parte entera del número) de expresión-serie es superior a precisión - escala (SQLSTATE 22003). El carácter decimal por omisión no es válido en la subserie si se especifica un valor diferente para el argumento carácter-decimal (SQLSTATE 22018).
- Fecha y hora a DECIMAL
-
- expresión-fecha-hora
- Expresión que devuelve un valor del tipo DATE, TIME o TIMESTAMP.
- precisión
- Una constante de enteros con un valor en el rango de 1 a 31 que
especifica la precisión del resultado. Si no se especifica, el valor por omisión para la precisión y la escala depende del tipo de datos de expresión-fecha-hora de la manera siguiente:
- La precisión es 8 y la escala es 0 para DATE. El resultado es un valor DECIMAL(8,0) que representa la fecha como aaaammdd.
- La precisión es 6 y la escala es 0 para TIME. El resultado es un valor DECIMAL(6,0) que representa la hora como hhmmss.
- La precisión es 14+tp y la escala es tp para TIMESTAMP(tp). El resultado es un valor DECIMAL(14+tp,tp) que representa la indicación de fecha y hora como aaaammddhhmmss.nnnnnnnnnnnn.
- escala
- Una constante de enteros con un valor en el rango de 0 a precisión que especifica la escala del resultado. Si no se especifica y se especifica una precisión, el valor por omisión es 0.
El resultado es el mismo número que generaría CAST(fecha_hora - expresión AS DECIMAL(precisión, escala)). Los dígitos se truncan al final del número decimal si el número de dígitos a la derecha del carácter separador de decimales es superior al valor de escala. Se devuelve un error si el número de dígitos significativos a la izquierda del carácter decimal (la parte entera del número) de expresión-serie es superior a precisión - escala (SQLSTATE 22003).
especificación CAST.
Ejemplos
- Ejemplo 1: utilizar la función DECIMAL para forzar a que se devuelva
un tipo de datos DECIMAL (con una precisión de 5 y una escala de 2)
en una lista-selección para la columna EDLEVEL (tipo de
datos = SMALLINT) en la tabla EMPLOYEE. La columna EMPNO debe aparecer también en la lista de selección.
SELECT EMPNO, DECIMAL(EDLEVEL,5,2) FROM EMPLOYEE - Ejemplo 2: supongamos que la variable del lenguaje principal PERIOD es de tipo
INTEGER.
En este caso, para utilizar su valor como duración de fecha debe
convertirse a decimal(8,0).
SELECT PRSTDATE + DECIMAL(:PERIOD,8) FROM PROJECT - Ejemplo 3: supongamos que las actualizaciones en la columna SALARY se entran mediante
una ventana como una serie de caracteres que utiliza la coma como carácter
decimal (por ejemplo, el usuario entra 21400,50). Cuando se ha validado por la aplicación,se asigna a la variable del lenguaje principal newsalary definida como
CHAR(10).
El valor de newsalary se convierte en 21400.50.UPDATE STAFF SET SALARY = DECIMAL(:newsalary, 9, 2, ',') WHERE ID = :empid; - Ejemplo 4: añadir el carácter decimal por omisión (.) a un valor.
Esto falla debido a que el carácter (.) se especifica como un carácter decimal, pero aparece una coma (,) en el primer argumento como delimitador.DECIMAL('21400,50', 9, 2, '.') - Ejemplo 5: supongamos que la columna STARTING (cuyo tipo de datos es
TIME) tiene un valor interno equivalente a '12:10:00'.
da como resultado el valorDECIMAL(STARTING)121 000. - Ejemplo 6: supongamos que la columna RECEIVED (cuyo tipo de datos es
TIMESTAMP) tiene un valor interno equivalente a '1988-12-22-14.07.21.136421'.
da como resultado el valorDECIMAL(RECEIVED)19 881 222 140 721.136421. - Ejemplo 7: en este ejemplo se muestra el resultado decimal y la precisión y la escala resultante para varios valores de entrada de fecha y hora. Supongamos que existen las columnas siguientes con los valores asociados:
La tabla siguiente muestra el resultado decimal y la precisión y la escala resultante para varios valores de entrada de fecha y hora.
Nombre de columna Tipo de datos Valor ENDDT DATE 2000-03-21 ENDTM TIME 12:02:21 ENDTS TIMESTAMP 2000-03-21-12.02.21.123456 ENDTS0 TIMESTAMP(0) 2000-03-21-12.02.21 ENDTS9 TIMESTAMP(9) 2000-03-21-12.02.21.123456789 DECIMAL(argumentos) Precisión y escala Resultado DECIMAL(ENDDT) (8,0) 20000321. DECIMAL(ENDDT, 10) (10,0) 20000321. DECIMAL(ENDDT, 12, 2) (12,2) 20000321.00 DECIMAL(ENDTM) (6,0) 120221. DECIMAL(ENDTM, 10) (10,0) 120221. DECIMAL(ENDTM, 10, 2) (10,2) 120221.00 DECIMAL(ENDTS) (20, 6) 20000321120221.123456 DECIMAL(ENDTS, 23) (23, 0) 20000321120221. DECIMAL(ENDTS, 23, 4) (23, 4) 20000321120221.1234 DECIMAL(ENDTS0) (14,0) 20000321120221. DECIMAL(ENDTS9) (23,9) 20000321120221.123456789
