MySQL
Aritmética
Buscar..
Observaciones
MySQL, en la mayoría de las máquinas, utiliza la aritmética de punto flotante IEEE 754 de 64 bits para sus cálculos.
En contextos enteros utiliza aritmética de enteros.
-
RAND()
no es un generador de números aleatorios perfecto. Se utiliza principalmente para generar rápidamente números pseudoaleatorios.
Operadores aritméticos
MySQL proporciona los siguientes operadores aritméticos
Operador | Nombre | Ejemplo |
---|---|---|
+ | Adición | SELECT 3+5; -> 8 SELECT 3.5+2.5; -> 6.0 SELECT 3.5+2; -> 5.5 |
- | Sustracción | SELECT 3-5; -> -2 |
* | Multiplicación | SELECT 3 * 5; -> 15 |
/ | División | SELECT 20 / 4; -> 5 SELECT 355 / 113; -> 3.1416 SELECT 10.0 / 0; -> NULL |
DIV | División entera | SELECT 5 DIV 2; -> 2 |
% o MOD | Modulo | SELECT 7 % 3; -> 1 SELECT 15 MOD 4 -> 3 SELECT 15 MOD -4 -> 3 SELECT -15 MOD 4 -> -3 SELECT -15 MOD -4 -> -3 SELECT 3 MOD 2.5 -> 0.5 |
BIGINT
Si los números en su aritmética son todos enteros, MySQL usa el tipo de datos entero BIGINT
(con signo de 64 bits) para hacer su trabajo. Por ejemplo:
select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1
-> 1,152,921,504,606,846,977
y
select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024
-> BIGINT
error fuera de rango
DOBLE
Si algún número en su aritmética es fraccional, MySQL usa aritmética de punto flotante IEEE 754 de 64 bits . Debe tener cuidado al usar la aritmética de punto flotante, porque muchos números de punto flotante son, inherentemente, aproximaciones en lugar de valores exactos .
Constantes matemáticas
Pi
Lo siguiente devuelve el valor de PI
formateado a 6 lugares decimales. El valor real es bueno para DOUBLE
;
SELECT PI(); -> 3.141593
Trigonometría (SIN, COS)
Los ángulos están en radianes, no en grados. Todos los cálculos se realizan en punto flotante de 64 bits IEEE 754 . Todos los cálculos de punto flotante están sujetos a pequeños errores, conocidos como errores de la máquina ε (épsilon) , así que evite intentar compararlos para la igualdad. No hay forma de evitar estos errores cuando se utiliza un punto flotante; Están incorporados a la tecnología.
Si usa valores DECIMAL
en los cálculos trigonométricos, se convierten implícitamente a punto flotante y luego regresan a decimal.
Seno
Devuelve el seno de un número X expresado en radianes
SELECT SIN(PI()); -> 1.2246063538224e-16
Coseno
Devuelve el coseno de X cuando X se da en radianes
SELECT COS(PI()); -> -1
Tangente
Devuelve la tangente de un número X expresado en radianes. Observe que el resultado es muy cercano a cero, pero no exactamente a cero. Este es un ejemplo de máquina ε.
SELECT TAN(PI()); -> -1.2246063538224e-16
Arco coseno (coseno inverso)
Devuelve el coseno del arco de X si X está en el rango de -1 to 1
SELECT ACOS(1); -> 0
SELECT ACOS(1.01); -> NULL
Seno del arco (seno siniestro)
Devuelve el seno de arco de X si X está en el rango de -1 to 1
SELECT ASIN(0.2); -> 0.20135792079033
Arco tangente (tangente inverso)
ATAN(x)
devuelve la tangente de arco de un solo número.
SELECT ATAN(2); -> 1.1071487177941
ATAN2(X, Y)
devuelve el arco tangente de las dos variables X e Y. Es similar al cálculo del arco tangente de Y / X. Pero es numéricamente más robusto: t funciona correctamente cuando X está cerca de cero y los signos de ambos argumentos se utilizan para determinar el cuadrante del resultado.
Las mejores prácticas sugieren escribir fórmulas para usar ATAN2()
lugar de ATAN()
siempre que sea posible.
ATAN2(1,1); -> 0.7853981633974483 (45 degrees)
ATAN2(1,-1); -> 2.356194490192345 (135 degrees)
ATAN2(0, -1); -> PI (180 degrees) don't try ATAN(-1 / 0)... it won't work
Cotangente
Devuelve la cotangente de X
SELECT COT(12); -> -1.5726734063977
Conversión
SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180
Redondeo (REDONDO, PISO, CEIL)
Redondear un número decimal a un valor entero
Para valores numéricos exactos (p. Ej., DECIMAL
): si el primer lugar decimal de un número es 5 o más, esta función redondeará un número al siguiente entero que se encuentre alejado de cero . Si la posición decimal es 4 o inferior, esta función se redondeará al siguiente valor entero más cercano a cero .
SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5
Para valores numéricos aproximados (p. Ej., DOUBLE
): El resultado de la función ROUND()
depende de la biblioteca C; en muchos sistemas, esto significa que ROUND()
utiliza la ronda a la regla par más cercana :
SELECT ROUND(45e-1) -> 4 -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6 -- The nearest even value is 6
Redondear un numero
Para redondear un número, use la función CEIL()
o CEILING()
SELECT CEIL(1.23) -> 2
SELECT CEILING(4.83) -> 5
Redondear hacia abajo un número
Para redondear un número, use la función FLOOR()
SELECT FLOOR(1.99) -> 1
PISO y CEIL van hacia / lejos del infinito:
SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1
Redondear un número decimal a un número especificado de lugares decimales.
SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200
La discusión de arriba contra abajo y "5" también se aplica.
Elevar un número a una potencia (POW)
Para elevar un número x
a una potencia y
, use las funciones POW()
o POWER()
SELECT POW(2,2); => 4
SELECT POW(4,2); => 16
Raíz cuadrada (SQRT)
Utilice la función SQRT()
. Si el número es negativo, se devolverá NULL
.
SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL
Números aleatorios (RAND)
Generar un número aleatorio
Para generar un número de punto flotante pseudoaleatorio entre 0
y 1
, use la función RAND()
Supongamos que tiene la siguiente consulta
SELECT i, RAND() FROM t;
Esto devolverá algo como esto
yo | RAND () |
---|---|
1 | 0.6191438870682 |
2 | 0.93845168309142 |
3 | 0.83482678498591 |
Número aleatorio en un rango
Para generar un número aleatorio en el rango a <= n <= b, puede usar la siguiente fórmula
FLOOR(a + RAND() * (b - a + 1))
Por ejemplo, esto generará un número aleatorio entre 7 y 12.
SELECT FLOOR(7 + (RAND() * 6));
Una forma sencilla de devolver aleatoriamente las filas de una tabla:
SELECT * FROM tbl ORDER BY RAND();
Estos son números pseudoaleatorios .
El generador de números pseudoaleatorios en MySQL no es criptográficamente seguro. Es decir, si usa MySQL para generar números aleatorios para usarlos como secretos, un adversario determinado que sabe que usó MySQL podrá adivinar sus secretos más fácilmente de lo que cree.
Valor absoluto y signo (ABS, SIGNO)
Devuelve el valor absoluto de un número.
SELECT ABS(2); -> 2
SELECT ABS(-46); -> 46
El sign
de un número lo compara con 0.
Firmar | Resultado | Ejemplo |
---|---|---|
-1 | n <0 | SELECT SIGN(42); -> 1 |
0 | n = 0 | SELECT SIGN(0); -> 0 |
1 | n> 0 | SELECT SIGN(-3); -> -1 |
SELECT SIGN(-423421); -> -1