12.4. Funciones numéricas

MySQL 5.0

12.4. Funciones numéricas

12.4.1. Operadores aritméticos

Los operadores aritméticos usuales están disponibles. Tenga en cuenta que en el caso de , , y , el resultado se calcula con precisión (64-bit) si ambos argumentos son enteros. Si uno de los argumentos es un entero sin signo, y los otros argumentos son también enteros, el resultado es un entero sin signo. Consulte Sección 12.8, “Funciones y operadores de cast”.

  • Suma:

    mysql> SELECT 3+5;
            -> 8
    

  • Resta:

    mysql> SELECT 3-5;
            -> -2
    

  • Menos unario. Cambia el signo del argumento.

    mysql> SELECT - 2;
            -> -2
    

    Nota: Si este operador se usa con , el valor de retorno es también . Esto significa que debe eliminar usar con enteros que pueden ser iguales o menores a -2^63.

  • Multiplicación:

    mysql> SELECT 3*5;
            -> 15
    mysql> SELECT 18014398509481984*18014398509481984.0;
            -> 324518553658426726783156020576256.0
    mysql> SELECT 18014398509481984*18014398509481984;
            -> 0
    

    El resultado de la última expresión es incorrecto ya que el resultado de la multiplicación entera excede el rango de 64-bit de cálculos . (Consulte Sección 11.2, “Tipos numéricos”.)

  • División:

    mysql> SELECT 3/5;
            -> 0.60
    

    División por cero produce un resultado :

    mysql> SELECT 102/(1-1);
            -> NULL
    

    Una división se calcula con aritmética sólo en un contexto donde el resultado se convierte a entero.

  • División entera. Similar a pero funciona con valores .

    mysql> SELECT 5 DIV 2;
            -> 2
    

12.4.2. Funciones matemáticas

Todas las funciones matemáticas retornan en caso de error.

  • )

    Retorna el valor absoluto de .

    mysql> SELECT ABS(2);
            -> 2
    mysql> SELECT ABS(-32);
            -> 32
    

    Esta función puede usar valores .

  • )

    Retorna el arcocoseno de , esto es, el valor cuyo coseno es . Retorna si no está en el rango -1 a 1.

    mysql> SELECT ACOS(1);
            -> 0
    mysql> SELECT ACOS(1.0001);
            -> NULL
    mysql> SELECT ACOS(0);
            -> 1.5707963267949
    

  • )

    Retorna el arcoseno de , esto es, el valor cuyo seno es . Retorna si no está en el rango de -1 a 1.

    mysql> SELECT ASIN(0.2);
            -> 0.20135792079033
    mysql> SELECT ASIN('foo');
            -> 0
    

  • )

    Retorna la arcotangente de , esto es, el valor cuya tangente es .

    mysql> SELECT ATAN(2);
            -> 1.1071487177941
    mysql> SELECT ATAN(-2);
            -> -1.1071487177941
    

  • ,) , ,)

    Retorna la arcotangente de las variables y . Es similar a calcular la arcotangente de / , excepto que los signos de ambos argumentos se usan para determinar el cuadrante del resultado.

    mysql> SELECT ATAN(-2,2);
            -> -0.78539816339745
    mysql> SELECT ATAN2(PI(),0);
            -> 1.5707963267949
    

  • ), )

    Retorna el entero más pequeño no menor a .

    mysql> SELECT CEILING(1.23);
            -> 2
    mysql> SELECT CEIL(-1.23);
            -> -1
    

    Estas dos funciones son sinónimos. Tenga en cuenta que el valor retornado se convierte a .

  • )

    Retorna el coseno de , donde se da en radianes.

    mysql> SELECT COS(PI());
            -> -1
    

  • )

    Retorna la cotangente de .

    mysql> SELECT COT(12);
            -> -1.5726734063977
    mysql> SELECT COT(0);
            -> NULL
    

  • )

    Computa un valor de redundancia cíclica y retorna el valor sin signo de 32 bits. El resultado es si el argumento es . Se espera que el argumento sea una cadena y (si es posible) se trata como una si no lo es.

    mysql> SELECT CRC32('MySQL');
            -> 3259397556
    mysql> SELECT CRC32('mysql');
            -> 2501908538
    

  • )

    Retorna el argumento , convertido de radianes a grados.

    mysql> SELECT DEGREES(PI());
            -> 180
    mysql> SELECT DEGREES(PI() / 2);
            -> 90
    

  • )

    Retorna el valor de (la base del logaritmo natural) a la potencia de .

    mysql> SELECT EXP(2);
            -> 7.3890560989307
    mysql> SELECT EXP(-2);
            -> 0.13533528323661
    

  • )

    Retorna el valor entero más grande pero no mayor a .

    mysql> SELECT FLOOR(1.23);
            -> 1
    mysql> SELECT FLOOR(-1.23);
            -> -2
    

    Tenga en cuenta que el valor devuelto se convierte a .

  • )

    Retorna el logaritmo natural de , esto es, el logaritmo de base .

    mysql> SELECT LN(2);
            -> 0.69314718055995
    mysql> SELECT LN(-2);
            -> NULL
    

    Esta función es sinónimo a ).

  • ), ,)

    Si se llama con un parámetro, esta función retorna el logaritmo natural de .

    mysql> SELECT LOG(2);
            -> 0.69314718055995
    mysql> SELECT LOG(-2);
            -> NULL
    

    Si se llama con dos parámetros, esta función retorna el logaritmo de para una base arbitrária .

    mysql> SELECT LOG(2,65536);
            -> 16
    mysql> SELECT LOG(10,100);
            -> 2
    

    ,) es equivalente a ) / LOG().

  • )

    Retorna el logaritmo en base 2 de .

    mysql> SELECT LOG2(65536);
            -> 16
    mysql> SELECT LOG2(-100);
            -> NULL
    

    es útil para encontrar cuántos bits necesita un número para almacenamiento. Esta función es equivalente a la expresión ) / LOG(2).

  • )

    Retorna el logaritmo en base 10 de .

    mysql> SELECT LOG10(2);
            -> 0.30102999566398
    mysql> SELECT LOG10(100);
            -> 2
    mysql> SELECT LOG10(-100);
            -> NULL
    

    ) es equivalente a ).

  • ,) , % , MOD

    Operación de módulo. Retorna el resto de dividido por .

    mysql> SELECT MOD(234, 10);
            -> 4
    mysql> SELECT 253 % 7;
            -> 1
    mysql> SELECT MOD(29,9);
            -> 2
    mysql> SELECT 29 MOD 9;
            -> 2
    

    Esta función puede usar valores .

    también funciona con valores con una parte fraccional y retorna el resto exacto tras la división:

    mysql> SELECT MOD(34.5,3);
            -> 1.5
    

  • Retorna el valor de π (pi). El número de decimales que se muestra por defecto es siete, pero MySQL usa internamente el valor de doble precisión entero.

    mysql> SELECT PI();
            -> 3.141593
    mysql> SELECT PI()+0.000000000000000000;
            -> 3.141592653589793116
    

  • ,) , ,)

    Retorna el valor de a la potencia de .

    mysql> SELECT POW(2,2);
            -> 4
    mysql> SELECT POW(2,-2);
            -> 0.25
    

  • )

    Retorna el argumento , convertido de grados a radianes. (Tenga en cuenta que π radianes son 180 grados.)

    mysql> SELECT RADIANS(90);
            -> 1.5707963267949
    

  • , )

    Retorna un valor aleatorio en coma flotante del rango de 0 a 1.0. Si se especifica un argumento entero , es usa como semilla, que produce una secuencia repetible.

    mysql> SELECT RAND();
            -> 0.9233482386203
    mysql> SELECT RAND(20);
            -> 0.15888261251047
    mysql> SELECT RAND();
            -> 0.63553050033332
    mysql> SELECT RAND();
            -> 0.70100469486881
    mysql> SELECT RAND(20);
            -> 0.15888261251047
    

    Puede usar esta función para recibir registros de forma aleatoria como se muestra aquí:

    mysql> SELECT * FROM  ORDER BY RAND();
    

    combinado con es útil para seleccionar una muestra aleatoria de una conjunto de registros:

    mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d
        -> ORDER BY RAND() LIMIT 1000;
    

    Tenga en cuenta que en una cláusula se re-evalúa cada vez que se ejecuta el .

    no pretende ser un generador de números aleatorios perfecto, pero es una forma rápida de generar números aleatorios ad hoc portable entre plataformas para la misma versión de MySQL.

  • ), ,)

    Retorna el argumento , redondeado al entero más cercano. Con dos argumentos, retorna redondeado a decimales. puede ser negativo para redondear dígitos a la izquierda del punto decimal del valor .

    mysql> SELECT ROUND(-1.23);
            -> -1
    mysql> SELECT ROUND(-1.58);
            -> -2
    mysql> SELECT ROUND(1.58);
            -> 2
    mysql> SELECT ROUND(1.298, 1);
            -> 1.3
    mysql> SELECT ROUND(1.298, 0);
            -> 1
    mysql> SELECT ROUND(23.298, -1);
            -> 20
    

    El tipo de retorno es el mismo tipo que el del primer argumento (asumiendo que sea un entero, doble o decimal). Esto significa que para un argumento entero, el resultado es un entero (sin decimales).

    Antes de MySQL 5.0.3, el comportamiento de cuando el argumento se encuentra a medias entre dos enteros depende de la implementación de la biblioteca C. Implementaciones distintas redondean al número par más próximo, siempre arriba, siempre abajo, o siempre hacia cero. Si necesita un tipo de redondeo, debe usar una función bien definida como o en su lugar.

    Desde MySQL 5.0.3, usa la biblioteca de matemática precisa para valores exactos cuando el primer argumento es un valor con decimales:

    • Para números exactos, usa la regla de "redondea la mitad hacia arriba": Un valor con una parte fracional de .5 o mayor se redondea arriba al siguiente entero si es positivo o hacia abajo si el siguiente entero es negativo. (En otras palabras, se redondea en dirección contraria al cero.) Un valor con una parte fraccional menor a .5 se redondea hacia abajo al siguiente entero si es positivo o hacia arriba si el siguiente entero es negativo.

    • Para números aproximados, el resultado depende de la biblioteca C. En muchos sistemas, esto significa que usa la regla de "redondeo al número par más cercano": Un valor con una parte fraccional se redondea al entero más cercano.

    El siguiente ejemplo muestra cómo el redondeo difiere para valores exactos y aproximados:

    mysql> SELECT ROUND(2.5), ROUND(25E-1);
    +------------+--------------+
    | ROUND(2.5) | ROUND(25E-1) |
    +------------+--------------+
    | 3          |            2 |
    +------------+--------------+
    

    Para más información, consulte Capítulo 23, Matemáticas de precisión.

  • )

    Retorna el signo del argumento como , , o , en función de si es negativo, cero o positivo.

    mysql> SELECT SIGN(-32);
            -> -1
    mysql> SELECT SIGN(0);
            -> 0
    mysql> SELECT SIGN(234);
            -> 1
    

  • )

    Retorna el seno de , donde se da en radianes.

    mysql> SELECT SIN(PI());
            -> 1.2246063538224e-16
    mysql> SELECT ROUND(SIN(PI()));
            -> 0
    

  • )

    Retorna la raíz cuadrada de un número no negativo. .

    mysql> SELECT SQRT(4);
            -> 2
    mysql> SELECT SQRT(20);
            -> 4.4721359549996
    mysql> SELECT SQRT(-16);
            -> NULL        
    

  • )

    Retorna la tangente de , donde se da en radianes.

    mysql> SELECT TAN(PI());
            -> -1.2246063538224e-16
    mysql> SELECT TAN(PI()+1);
            -> 1.5574077246549
    

  • ,)

    Retorna el número , truncado a decimales. Si es 0, el resultado no tiene punto decimal o parte fraccional. puede ser negativo para truncar (hacer cero) dígitos a la izquierda del punto decimal del valor .

    mysql> SELECT TRUNCATE(1.223,1);
            -> 1.2
    mysql> SELECT TRUNCATE(1.999,1);
            -> 1.9
    mysql> SELECT TRUNCATE(1.999,0);
            -> 1
    mysql> SELECT TRUNCATE(-1.999,1);
            -> -1.9
    mysql> SELECT TRUNCATE(122,-2);
           -> 100
    

    Todos los números se redondean hacia cero.