Tipo de dato numérico en SQL

Crear datos numéricos en SQL es bastante sencillo: puedes escribir un número como literal, obtenerlo de una columna de una tabla o generarlo mediante cálculos.

En los cálculos puedes usar todas las operaciones aritméticas habituales (+, -, *, / y otras) y cambiar el orden de evaluación con paréntesis.

MySQL 8.4
SELECT 2 * ((22 - 16) / (2 + 1)) AS calc_example;
calc_example
4

Funciones matemáticas

Para la mayoría de los cálculos matemáticos, como elevar un número a una potencia o calcular su raíz cuadrada, SQL tiene funciones numéricas integradas. Estos son algunos ejemplos:

Nombre de la funciónDescripción
POW(num, power)Eleva un número a la potencia indicada
SQRT(num)Calcula la raíz cuadrada de un número
LOG(base, num)Calcula el logaritmo de un número en la base indicada
EXP(num)Calcula enum
SIN(num)Calcula el seno de un número
COS(num)Calcula el coseno de un número
TAN(num)Calcula la tangente de un número

La lista de todas las funciones numéricas, con su descripción y ejemplos, la tienes en la Referencia SQL.

Nombre de la funciónDescripción
POWER(num, power)Eleva un número a la potencia indicada
SQRT(num)Calcula la raíz cuadrada de un número
LOG(base, num)Calcula el logaritmo de un número en la base indicada
EXP(num)Calcula enum
SIN(num)Calcula el seno de un número
COS(num)Calcula el coseno de un número
TAN(num)Calcula la tangente de un número

La lista de todas las funciones numéricas, con su descripción y ejemplos, la tienes en la Referencia SQL.

Redondeo de números

Al trabajar con números de coma flotante, no siempre hace falta guardar o mostrar los números con toda su precisión. Por ejemplo, las transacciones de dinero se pueden guardar con 6 decimales y mostrarse con 2, es decir, con precisión de céntimos.

Para redondear datos numéricos, SQL ofrece estas 4 funciones: CEILING, FLOOR, ROUND, TRUNCATE.

Las funciones CEILING y FLOOR redondean un número al entero más cercano hacia arriba y hacia abajo, respectivamente.

MySQL 8.4
SELECT CEILING(69.69) AS ceiling, FLOOR(69.69) AS floor;

Para redondear datos numéricos, SQL ofrece estas 4 funciones: CEIL, FLOOR, ROUND, TRUNC.

Las funciones CEIL y FLOOR redondean un número al entero más cercano hacia arriba y hacia abajo, respectivamente.

MySQL 8.4
SELECT CEIL(69.69) AS ceiling, FLOOR(69.69) AS floor;
ceilingfloor
7069

Para redondear al entero más cercano existe la función ROUND: cualquier número cuya parte decimal sea mayor o igual que 0,5 lo redondea hacia arriba y, si no, hacia abajo.

MySQL 8.4
SELECT ROUND(69.499), ROUND(69.5), ROUND(69.501);
ROUND(69.499)ROUND(69.5)ROUND(69.501)
697070

La función ROUND también permite redondear un número a una cantidad determinada de decimales. Para ello acepta un segundo argumento opcional con el número de decimales que quieres conservar.

MySQL 8.4
SELECT ROUND(69.7171,1), ROUND(69.7171,2), ROUND(69.7171,3);
ROUND(69.7171,1)ROUND(69.7171,2)ROUND(69.7171,3)
69.769.7269.717

El segundo argumento de ROUND también admite valores negativos. En ese caso, tantas cifras a la izquierda del punto decimal como indique el argumento pasan a ser cero y la parte decimal se descarta.

MySQL 8.4
SELECT ROUND(1691.7,-1), ROUND(1691.7,-2), ROUND(1691.7,-3);
ROUND(1691.7,-1)ROUND(1691.7,-2)ROUND(1691.7,-3)
169017002000

La función TRUNCATE es análoga a ROUND y también acepta un 2.º parámetro opcional, solo que, en lugar de redondear, simplemente descarta las cifras que sobran.

MySQL 8.4
SELECT TRUNCATE(69.7979,1), TRUNCATE(69.7979,2), TRUNCATE(69.7979,3);
TRUNCATE(69.7979,1)TRUNCATE(69.7979,2)TRUNCATE(69.7979,3)
69.769.7969.797

¿Y qué devolverá la siguiente expresión?

MySQL 8.4
SELECT TRUNCATE(69.7979, -1);

La función TRUNC es análoga a ROUND y también acepta un 2.º parámetro opcional, solo que, en lugar de redondear, simplemente descarta las cifras que sobran.

MySQL 8.4
SELECT TRUNC(69.7979,1), TRUNC(69.7979,2), TRUNC(69.7979,3);
TRUNC(69.7979,1)TRUNC(69.7979,2)TRUNC(69.7979,3)
69.769.7969.797

¿Y qué devolverá la siguiente expresión?

MySQL 8.4
SELECT TRUNC(69.7979, -1);

Trabajo con números con signo

Cuando trabajas con datos numéricos que pueden contener valores negativos, te pueden resultar útiles las funciones SIGN y ABS.

La función SIGN devuelve -1 si el número es negativo, 0 si es cero y 1 si es positivo.

MySQL 8.4
SELECT SIGN(-69), SIGN(0), SIGN(69);
SIGN(-69)SIGN(0)SIGN(69)
-101

La función ABS devuelve el valor absoluto de un número.

MySQL 8.4
SELECT ABS(-69), ABS(0), ABS(69);
ABS(-69)ABS(0)ABS(69)
69069