Creando funciones mysql. Funciones MySQL. Sintaxis de procedimientos y funciones almacenados.

¡Atención! este trabajo construido sobre la base de la traducción del apartado “17.1. Rutinas almacenadas y tablas de concesión" descripción del software MySQL 5.0.19, "Manual de referencia. Documenta MySQL 5.0 hasta 5.0.19. Documento generado el: 2006-01-23 (revisión:995)"
"Lea todo primero y luego pruebe los ejemplos".

Los procedimientos almacenados son un conjunto de comandos SQL que se pueden compilar y almacenar en un servidor. De esta manera, en lugar de almacenar una consulta utilizada con frecuencia, los clientes pueden hacer referencia al procedimiento almacenado correspondiente. Esto proporciona mejor rendimiento, porque esta solicitud debe analizarse solo una vez y reduce el tráfico entre el servidor y el cliente. El nivel conceptual también se puede aumentar creando una biblioteca de funciones en el servidor.

Un disparador es un procedimiento almacenado que se ejecuta cuando ocurre un evento. cierto evento. Por ejemplo, puede definir un procedimiento almacenado que se ejecute cada vez que se elimina un registro de una tabla transaccional, garantizando así eliminación automática el cliente correspondiente de la tabla de clientes cuando se eliminen todas sus transacciones.

Los programas almacenados (procedimientos y funciones) son compatibles con MySQL 5.0. Los procedimientos almacenados son un conjunto de expresiones SQL que se pueden almacenar en el servidor. Una vez hecho esto, el cliente ya no necesita retransmitir la solicitud, sino que simplemente llama al programa almacenado.

Esto puede resultar útil cuando:

  • Numerosas aplicaciones cliente están escritas en diferentes idiomas o trabajar en otras plataformas, pero necesita usar la misma base de datos de operaciones
  • la seguridad es lo primero

Los procedimientos y funciones almacenados (rutinas) pueden proporcionar un mejor rendimiento porque se requiere enviar menos información entre el cliente y el servidor. La elección aumenta la carga en el servidor de la base de datos, pero reduce los costos del lado del cliente. Usa esto si hay mucho máquinas cliente(como servidores web) son atendidos por una o más bases de datos.

Las rutinas almacenadas también le permiten utilizar bibliotecas de funciones almacenadas en la base de datos del servidor. Esta oportunidad se presenta a muchos. lenguas modernas programación que le permite llamarlos directamente (por ejemplo, usando clases).

MySQL sigue la sintaxis de SQL:2003 para procedimientos almacenados, que ya se utiliza en DB2 de IBM.

De las palabras a los hechos...

Al crear, modificar y eliminar rutinas almacenadas, el servidor manipula la tabla mysql.proc

A partir de MySQL 5.0.3 se requieren los siguientes privilegios:

CREAR RUTINA para crear procedimientos almacenados

ALTERAR LA RUTINA necesario cambiar o eliminar procedimientos. Este privilegio se asigna automáticamente al creador del procedimiento (función)

EJECUTAR Se requerirá privilegio para ejecutar la subrutina. Sin embargo, se asigna automáticamente al creador del procedimiento (función). Además, por defecto, el parámetro SQL SECURITY para la rutina DEFINER, que permite a los usuarios con acceso a la base de datos llamar a rutinas asociadas a esta base de datos.

Sintaxis de procedimientos y funciones almacenados.

Una rutina almacenada es un procedimiento o función. Las rutinas almacenadas se crean utilizando declaraciones CREATE PROCEDURE o CREATE FUNCTION. Una rutina almacenada se llama mediante una instrucción CALL, y solo se utilizan variables que devuelven valores como variables de salida. La función se puede llamar como cualquier otra función y puede devolver un valor escalar. Las rutinas almacenadas pueden llamar a otras rutinas almacenadas.

Desde MySQL 5.0.1, el procedimiento o función cargado está asociado a una base de datos específica. Esto tiene varios significados:

  • Cuando se llama a una subrutina, la intención es llamar a USE db_name (y descartar la base de datos cuando la subrutina se haya completado y la base de datos ya no sea necesaria)
  • Puede calificar nombres regulares con un nombre de base de datos. Esto se puede utilizar para hacer referencia a una rutina que no está en la base de datos actual. Por ejemplo, para ejecutar un procedimiento almacenado p o una función f que está asociada con la base de datos de prueba, puede decirle al intérprete de comandos así: CALL test.p() o test.f() .
  • Cuando se elimina una base de datos, también se eliminan todas las rutinas cargadas asociadas con ella. En MySQL 5.0.0, las rutinas cargadas son globales y no están asociadas con la base de datos. Heredan la base de datos predeterminada de la declaración de llamada. Si USE db_name se realiza dentro de una subrutina, la base de datos actual original se restaurará después de salir de la subrutina (por ejemplo, la base de datos actual es db_11, llamamos a una subrutina que usa db_22, después de salir de la subrutina permanece el db_11 actual)

MySQL es totalmente compatible con extensiones que le permiten utilizar expresiones SELECT regulares (sin utilizar cursores ni variables locales) dentro de procedimientos almacenados. El conjunto de resultados devuelto por la consulta simplemente se envía directamente al cliente. Una consulta SELECT múltiple genera múltiples conjuntos de resultados, por lo que el cliente debe usar una biblioteca que admita múltiples conjuntos de resultados.

CREAR PROCEDIMIENTO- crear un procedimiento almacenado.

CREAR FUNCIÓN- crear una función almacenada.

Sintaxis:

CREAR PROCEDIMIENTO nombre_procedimiento ([parámetro_procedimiento[,...]])
[características...] subrutina_cuerpo

CREAR FUNCIÓN nombre_función ([parámetro_función[,...]])
DEVOLUCIONES tipo
[característica...] subrutina_cuerpo

parámetro_procedimiento:
[ EN | AFUERA | ENTRADA FUERA] tipo de nombre_parámetro
parámetro_función:
tipo de nombre_parámetro

tipo:
Cualquier tipo de datos MySQL

característica:
IDIOMA SQL
|
DETERMINISTA
| ( CONTIENE SQL | NO SQL | LEE DATOS SQL | MODIFICA DATOS SQL )
| SEGURIDAD SQL (DEFINIDOR | INVOCADOR)

| COMENTARIO "cadena"
cuerpo_subrutina:

Corrija la expresión SQL.

Miremos todo en la práctica.

Primero, creemos un procedimiento almacenado con la siguiente consulta:
CREAR PROCEDIMIENTO `my_proc`(OUT t INTEGER(11))
NO DETERMINISTA
INVOCADOR DE SEGURIDAD SQL
COMENTARIO ""
COMENZAR
seleccione val1+val2 en "t" desde `my` LIMIT 0,1;

FIN;

El uso de la expresión LIMIT en esta consulta se realiza en reconocimiento del hecho de que no todos los clientes pueden aceptar un conjunto de resultados de varias filas.

Después de eso, llamémoslo:
LLAMAR a my_proc(@a);

SELECCIONE @a; Para departamento solicitud interna del externo siempre usan un separador diferente al habitual (para especificar usan el comando <строка/символ>)

DELIMITADOR

Aquí hay otro ejemplo teniendo en cuenta todos los requisitos.
Mysql> delimitador //
mysql> CREAR PROCEDIMIENTO simpleproc (OUT param1 INT)
-> COMENZAR
-> SELECCIONE CONTAR(*) EN param1 DE t;
-> //

->FIN;
mysql>delimitador;
mysql> CALL simpleproc(@a);
Consulta correcta, 0 filas afectadas (0,00 s)
+------+
mysql> SELECCIONAR @a;
+------+
| 3 |
+------+
| @a |

1 fila en conjunto (0,00 seg)

Todo el proceso se puede observar en la siguiente figura:

Desencadenantes

La compatibilidad con disparadores ha estado disponible en MySQL desde la versión 5.0.2. Desencadenar

- un objeto de base de datos con nombre que está asociado con una tabla y se activa cuando ocurre un evento determinado, un evento asociado con esta tabla.

Por ejemplo, el siguiente código crea una tabla y un disparador INSERT. El disparador suma los valores insertados en una de las columnas de la tabla.
Mysql> CREATE TABLE cuenta (num_cuenta INT, cantidad DECIMAL(10,2));
Consulta correcta, 0 filas afectadas (0,03 segundos)
-> PARA CADA FILA SET @sum = @sum + NEW.amount;
Consulta correcta, 0 filas afectadas (0,06 segundos)

Declaremos una suma variable y le asignaremos el valor 1. Después de eso, cada vez que insertemos en la tabla cuenta el valor de esta variable aumentará según la parte insertada.

Comentario. Si el valor de la variable no se inicializa, ¡el disparador no funcionará!

Sintaxis para crear un disparador

CREAR

DESENCADENAR nombre_disparador tiempo_disparador evento_disparador
EN nombre_tabla PARA CADA FILA expresión_ejecutada_cuando_trigger_fires

Si todo está claro de inmediato con el nombre del activador y el nombre de usuario, hablaremos de "tiempo de activación" y "evento" por separado.

tiempo_disparador

Define el momento en el que se produce la acción desencadenante. ANTES significa que el disparador se ejecutará antes de que se complete el evento desencadenante y DESPUÉS significa después. Por ejemplo, al insertar registros (ver ejemplo anterior), nuestro disparador se activó antes de la inserción real del registro y calculó la suma. Esta opción es apropiada para el cálculo preliminar de algunos campos adicionales en la tabla o para la inserción paralela en otra tabla.

evento_disparador

Aquí todo es más sencillo. Indica claramente en qué evento se ejecuta el disparador.

  • INSERTAR: es decir durante operaciones de inserción o expresiones similares (INSERT, LOAD DATA y REPLACE)
  • ACTUALIZACIÓN: cuando se modifica una entidad (fila)
  • ELIMINAR: Cuando se elimina un registro (consultas que contienen declaraciones ELIMINAR y/o REEMPLAZAR)

Para poder utilizar estas funciones, debe compilar PHP con soporte MySQL.

Instalación

Con la opción de configuración --with-mysql habilitas acceso PHP a la base de datos MySQL. Si usa esta opción sin especificar una ruta MySQL, PHP usará las bibliotecas cliente MySQL integradas. En PHP4 Soporte MySQL siempre encendido; Si no especifica esta opción de configuración, se utilizan las bibliotecas vinculadas. Los usuarios que ejecutan otras aplicaciones que utilizan MySQL (por ejemplo, cuando iniciando PHP 3 y PHP 4 como módulos de Apache de la competencia, o auth-mysql), siempre deben especificar la ruta a MySQL: --with-mysql=/path/to/mysql . Esto obligará a PHP a utilizar las bibliotecas cliente instaladas por MySQL, eliminando cualquier conflicto.

Instalación

El comportamiento de las funciones de MySQL está determinado por la configuración en el archivo de configuración global php.ini.

Tabla 1. Opciones de configuración de MySQL
NombrePor defecto Cambiable
mysql.allow_persistent"En"PHP_INI_SYSTEM
mysql.max_persistent"-1" PHP_INI_SYSTEM
mysql.max_links "-1" PHP_INI_SYSTEM
mysql.default_portNULOPHP_INI_ALL
mysql.default_socketNULOPHP_INI_ALL
mysql.default_host NULOPHP_INI_ALL
mysql.default_userNULOPHP_INI_ALL
mysql.contraseña_predeterminadaNULOPHP_INI_ALL

Para obtener más detalles y la definición de las constantes PHP_INI_*, consulte ini_set() .

Aquí breve descripción directivas de configuración.

mysql.allow_persistent booleano mysql.max_persistent entero

Número máximo de conexiones MySQL persistentes por proceso.

mysql.max_links entero

Número máximo de conexiones MySQL persistentes por proceso, incluidas las conexiones persistentes.

mysql.default_port cadena

El número de puerto TCP predeterminado que se utilizará al conectarse al servidor de la base de datos si no se especifica ningún otro puerto. Si no se especifica un puerto predeterminado, el valor se obtiene de variable de entorno MYSQL_TCP_PORT, apariciones de mysql-tcp en /etc/services, o constantes de tiempo de compilación MYSQL_PORT, en ese orden. Win32 solo usa la constante MYSQL_PORT.

mysql.default_socket cadena

El nombre de socket predeterminado que se utilizará al conectarse al servidor de base de datos local, a menos que se especifique un nombre de socket diferente.

mysql.default_host cadena

El host del servidor predeterminado que se utilizará al conectarse al servidor de base de datos local si no se especifica ningún otro host. No probado en modo seguro.

mysql.default_user cadena

El nombre de usuario predeterminado que se utilizará al conectarse al servidor de la base de datos, a menos que se especifique lo contrario. No aplica en modo seguro.

mysql.contraseña_predeterminada cadena

La contraseña predeterminada que se utilizará al conectarse al servidor de la base de datos si no se especifica ninguna otra contraseña. No aplica en modo seguro.

Hay dos tipos de recursos utilizados en un módulo MySQL. El primero es el identificador del enlace para conectarse a la base de datos, el segundo es el recurso que contiene el resultado de la consulta.

Constantes predefinidas

Tabla 2. Constantes de recuperación de MySQL

Ejemplos

Este ejemplo muestra cómo conectarse a una base de datos, ejecutar una consulta, imprimir las filas de resultados y desconectarse de la base de datos MySQL.

Contenido mysql_affected_rows - obtiene el número de filas involucradas en la operación MySQL anterior mysql_change_user - cambia el usuario que inició sesión en la conexión activa mysql_character_set_name - devuelve el nombre del juego de caracteres mysql_close - cierra una conexión MySQL mysql_connect - abre una conexión al servidor MySQL mysql_create_db - crea una Base de datos MySQL mysq l_data_seek - mueve el puntero de resultado interno mysql_db_name - recibe los datos del resultado mysql_db_query - envía una consulta MySQL mysql_drop_db - descarta una base de datos MySQL mysql_errno - devuelve el valor numérico del mensaje de error de una operación MySQL anterior mysql_error - devuelve el texto del mensaje de error de una operación MySQL anterior mysql_escape_string - mnemoniza/Escape la cadena para usar en mysql_query mysql_fetch_array - recupera la fila de resultados como matriz asociativa, matriz numérica o ambos mysql_fetch_assoc - Recupera la fila de resultados como una matriz asociativa mysql_fetch_field - Recibe la información de la columna del resultado y la devuelve como un objeto mysql_fetch_lengths - Recupera la longitud de cada salida en el resultado mysql_fetch_object - Recupera la fila de resultados como un objeto mysql_fetch_row - Recibe el fila de resultados en una matriz enumerable mysql_field_flags: recupera los indicadores asociados con el campo especificado en el resultado mysql_field_len: devuelve la longitud del campo especificado en el resultado

6.3.3.2. Funciones matemáticas

Todo funciones matemáticas en caso de error, devuelve NULL.

    Menos unario. Cambia el signo del argumento:

    mysql> SELECCIONAR - 2; -> -2

    Tenga en cuenta que si este operador se utiliza con datos de tipo BIGINT, el valor de retorno también será de tipo BIGINT. ¡Esto significa que debes evitar usar el operador en números enteros que puedan tener una magnitud de -2^63!

    Devoluciones valor absoluto valores X:

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

    Devuelve el signo del argumento, especificado como -1, 0 o 1, dependiendo de si X es negativo, cero o positivo:

    mysql> SELECCIONAR SIGNO(-32);-> -1 mysql> SELECCIONAR SIGNO(0);-> 0 mysql> SELECCIONAR SEÑAL(234); -> 1

    Valor de módulo (similar al operador % en C). Devuelve el resto cuando N se divide por M:

    mysql> SELECCIONAR MODO(234, 10);-> 4 mysql> SELECCIONE 253% 7;-> 1 mysql> SELECCIONAR MODO(29,9); -> 2

    Esta función se puede utilizar con confianza para valores BIGINT.

    Devuelve el número entero más grande que no exceda X:

    mysql> SELECCIONAR PISO(1.23);-> 1 mysql> SELECCIONAR PISO(-1.23); -> -2

    Devuelve el número entero más pequeño no menor que X:

    mysql> SELECCIONAR TECHO (1.23);-> 2 mysql> SELECCIONAR TECHO (-1.23); -> -1

    ¡Tenga en cuenta que el valor de retorno se convierte a BIGINT!

    Devuelve el argumento X redondeado al entero más cercano:

    mysql> SELECCIONAR RONDA(-1,23);-> -1 mysql> SELECCIONAR RONDA(-1,58);-> -2 mysql> SELECCIONAR RONDA(1,58); -> 2

    Tenga en cuenta que el comportamiento de la función ROUND() cuando el valor del argumento es igual al punto medio entre dos números enteros depende de la implementación específica de la biblioteca C. Se puede realizar el redondeo: al número par más cercano, siempre al superior más cercano, siempre al número par más cercano. inferior más cercano, siempre a cero. Para garantizar que el redondeo se produzca siempre en una sola dirección, debe utilizar well en lugar de este ciertas funciones, como TRUNCATE() o FLOOR() .

    Devuelve el argumento X redondeado a un número con D decimales. Si D es 0, el resultado se presentará sin decimal ni parte fraccionaria:

    mysql> SELECCIONAR RONDA(1.298, 1);-> 1.3 mysql> SELECCIONAR RONDA(1.298, 0); -> 1

    Devuelve el valor de e (la base de los logaritmos naturales) elevado a la potencia de X:

    mysql> SELECCIONAR EXP(2);-> 7.389056 mysql> SELECCIONAR EXP(-2); -> 0.135335

    Devoluciones logaritmo natural números X:

    mysql> SELECCIONE LN(2);-> 0.693147 mysql> SELECCIONAR LN(-2);-> NULO

    Esta característica se introdujo en MySQL 4.0.3. Este es un sinónimo de LOG(X).

    Si se llama con un parámetro, devuelve el logaritmo natural de X:

    mysql> SELECCIONAR REGISTRO(2);-> 0.693147 mysql> SELECCIONAR REGISTRO(-2);-> NULO

    Si se llama con dos parámetros, la función devuelve el logaritmo de X sobre base B:

    mysql> SELECCIONAR REGISTRO (2.65536);-> 16.000000 mysql> SELECCIONAR REGISTRO(1,100);-> NULO

    La opción de especificar una base logarítmica se introdujo en MySQL 4.0.3. LOG(B,X) es equivalente a LOG(X)/LOG(B) .

    Devuelve el logaritmo en base 2 de X:

    mysql> SELECCIONE LOG2(65536);-> 16.000000 mysql> SELECCIONE LOG2(-100);-> NULO

    La función LOG2() es útil para averiguar cuántos bits necesitará almacenar un número. Esta característica se agregó en MySQL 4.0.3. En versiones anteriores, llame a LOG(X)/LOG(2) en su lugar

    Devuelve el logaritmo decimal de un número X:

    mysql> SELECCIONE LOG10(2);-> 0.301030 mysql> SELECCIONE LOG10(100);-> 2.000000 mysql> SELECCIONE LOG10(-100);-> NULO

    POW(X,Y), POTENCIA(X,Y)

    Devuelve el valor del argumento X elevado a la potencia de Y:

    mysql> SELECCIONAR POW(2,2);-> 4.000000 mysql> SELECCIONAR POW(2,-2); -> 0.250000

    Devuelve no negativo raíz cuadrada números X:

    mysql> SELECCIONAR CUADRÍCULO(4);-> 2.000000 mysql> SELECCIONAR CUADRÍCULO(20); -> 4.472136

    Devuelve el valor de pi. De forma predeterminada, se representan 5 decimales, pero MySQL usa precisión doble completa para representar pi para cálculos internos.

    mysql> SELECCIONAR PI();-> 3.141593 mysql> SELECCIONAR PI()+0.0000000000000000000; -> 3.141592653589793116

    Devuelve el coseno de un número X, donde X está expresado en radianes:

    mysql> SELECCIONAR COS(PI()); -> -1.000000

    Devuelve el seno de X, donde X se expresa en radianes:

    mysql> SELECCIONE PECADO(PI()); -> 0.000000

    Devuelve la tangente de un número X, donde X se expresa en radianes:

    mysql> SELECCIONAR TAN(PI()+1); -> 1.557408

    Devuelve el arco coseno del número X, es decir una cantidad cuyo coseno es igual a X. Si X no está en el rango -1 a 1, devuelve NULL:

    mysql> SELECCIONE ACOS(1);-> 0.000000 mysql> SELECCIONAR ACOS(1.0001);-> NULO mysql> SELECCIONE ACOS(0); -> 1.570796

    Devuelve el arcoseno del número X, es decir una cantidad cuyo seno es igual a X. Si X no está en el rango -1 a 1, devuelve NULL:

    mysql> SELECCIONE ASIN(0.2);-> 0.201358 mysql> SELECCIONE ASIN("foo"); -> 0.000000

    Devuelve el arcotangente del número X, es decir una cantidad cuya tangente es igual a X:

    mysql> SELECCIONE ATAN(2);-> 1.107149 mysql> SELECCIONAR ATAN(-2); -> -1.107149

    ATAN(Y,X) , ATAN2(Y,X)

    Devuelve el arcotangente de dos variables X e Y. El cálculo se realiza de la misma manera que el arcotangente de Y/X, excepto que los signos de ambos argumentos se utilizan para determinar el cuadrante del resultado:

    mysql> SELECCIONAR ATAN(-2,2);-> -0.785398 mysql> SELECCIONE ATAN2(PI(),0); -> 1.570796

    Devuelve la cotangente del número X:

    mysql> SELECCIONAR CUNA(12);-> -1.57267341 mysql> SELECCIONAR CUNA(0);-> NULO

    ALEATORIO() , ALEATORIO(N)

    Devoluciones variable aleatoria coma flotante en el rango de 0 a 1,0. Si se especifica un argumento entero N, se utiliza como valor inicial de este valor:

    mysql> SELECCIONAR ALEATORIO();-> 0.9233482386203 mysql> SELECCIONAR ALEATORIO(20);-> 0.15888261251047 mysql> SELECCIONAR ALEATORIO(20);-> 0.15888261251047 mysql> SELECCIONAR ALEATORIO();-> 0.63553050033332 mysql> SELECCIONAR ALEATORIO(); -> 0.70100469486881

    En las expresiones ORDER BY, no debe utilizar una columna con valores RAND() porque el uso del operador ORDER BY dará como resultado múltiples cálculos en esa columna. En MySQL 3.23, sin embargo, puede hacer la siguiente declaración: SELECT * FROM table_name ORDER BY RAND(): Esto es útil para obtener una instancia aleatoria de un conjunto SELECT * FROM table1,table2 WHERE a=b AND c

    Si se dan dos o más argumentos, devuelve el argumento más pequeño (valor mínimo). Los argumentos se comparan de acuerdo con las siguientes reglas:

    • Si el valor de retorno se utiliza en un contexto de número entero (INTEGER), o todos los argumentos son números enteros, entonces se comparan como números enteros.

      Si el valor de retorno se utiliza en el contexto de números reales (REAL) o todos los argumentos son números reales, entonces se comparan como números de tipo REAL.

      Si uno de los argumentos es una cadena que distingue entre mayúsculas y minúsculas, entonces los argumentos se comparan de manera que distinga entre mayúsculas y minúsculas.

      De lo contrario, los argumentos se comparan como cadenas que no distinguen entre mayúsculas y minúsculas.

    mysql> SELECCIONE MENOS (2,0);-> 0 mysql> SELECCIONE MENOS (34.0,3.0,5.0,767.0);-> 3.0 mysql> SELECCIONE MENOS("B","A","C");-> "A"

    En versiones de MySQL anteriores a la 3.22.5, puede usar MIN() en lugar de LEAST.

    MAYOR(X,Y,...)

    Devuelve el mayor (con valor máximo) argumento. La comparación de argumentos sigue las mismas reglas que para MENOS:

    mysql> SELECCIONE EL MAYOR (2,0);-> 2 mysql> SELECCIONE EL MAYOR (34.0,3.0,5.0,767.0);-> 767.0 mysql> SELECCIONE EL MAYOR("B","A","C");-> "C"

    En versiones de MySQL anteriores a la 3.22.5, puede usar MAX() en lugar de GREATEST.

    Devuelve el argumento X convertido de radianes a grados:

    mysql> SELECCIONAR GRADOS(PI()); -> 180.000000

    Devuelve el argumento X convertido de grados a radianes:

    mysql> SELECCIONAR RADIANOS(90); -> 1.570796

    Devuelve el número X truncado a D decimales. Si D es 0, el resultado se presentará sin decimal ni parte fraccionaria:

    mysql> SELECCIONAR TRUNCAR(1.223,1);-> 1.2 mysql> SELECCIONAR TRUNCAR(1.999,1);-> 1.9 mysql> SELECCIONAR TRUNCAR(1.999,0);-> 1 mysql> SELECCIONAR TRUNCAR(-1.999,1); -> -1.9

    A partir de MySQL 3.23.51, todos los números se redondean hacia cero.

    Si D es negativo, entonces toda la parte del número se pone a cero:

    mysql> SELECCIONAR TRUNCAR(122,-2); -> 100

    Hay que tener en cuenta que habitualmente en los ordenadores numeros decimales no se almacenan como números enteros, sino como números decimales flotantes de doble precisión (DOUBLE). Por lo tanto, en ocasiones el resultado puede ser engañoso, como en el siguiente ejemplo:

    mysql> SELECCIONAR TRUNCAR (10.28*100.0); -> 1027

    Esto se debe a que 10.28 en realidad se almacena como algo así como 10.2799999999999999.




Arriba