1-Tema 6 Funciones
1-Tema 6 Funciones
1-Tema 6 Funciones
Funciones
1) ¿Cómo se usan las funciones?
2) Funciones numéricas
3) Funciones con cadenas
4) Funciones de trabajo con nulos
5) Funciones de manejo de fechas e intervalos
6) Funciones de conversión
7) Funciones de control de flujo
8) Funciones de listas
9) Funciones de agrupación o de totales
Reconocimiento
1
1. Cómo se usan las funciones
Todos los SGBD implementan funciones para facilitar la creación de consultas
complejas. Las funciones no son más que una extensión de los operadores y por
tanto se usan también para crear expresiones y realizar cálculos a partir de los
datos de la bd. Esas funciones dependen del SGBD que utilicemos, aunque hay
muchas estándar. En estos apuntes se comentan las más significativas tal como
se utilizan con MariaDB.
2. Funciones numéricas
Función Descripción
ROUND(n,[decimales]) Redondea el número con los decimales indicados. Si se omiten los
decimales, redondea a entero. Si los decimales son negativos, redondea a
la izquierda de la coma decimal.
Ejem: SELECT ROUND(8.239,2); → Devuelve 8.24
ROUND(8.239); → 8
ROUND(2348.239,-2); → 2300
TRUNCATE(n,decimal En lugar de redondear, corta los decimales para que sólo quede el
es) número de decimales indicado. En este caso no se pueden omitir los
decimales, pero si se indica el valor 0 en este campo, el resultado no tiene
parte fraccionaria (trunca al entero). Si los decimales son negativos,
trunca a la izquierda de la coma decimal.
Ejem: SELECT TRUNCATE(3.57,1) → Devuelve 3.5
TRUNCATE(3.57) → ERROR TRUNCATE(3.57, 0) → 3
TRUNCATE(392.57, -2) → 300 TRUNCATE(-392.57, -2) → -300
CEIL(n) ó CEILING(n) Valor entero más próximo y superior a n
Ejem: SELECT CEIL(2.7); → 3
CEIL(2) → 2 CEIL(-2.3) → -2 CEIL(-2) → -2
FLOOR(n) Valor entero más próximo e inferior a n -- Parte entera
Ejem: FLOOR(2.7) → 2 FLOOR(2) → 2
2
FLOOR(-2.3) → -3 FLOOR(-2) → -2
MOD(n1,n2) Devuelve el resto del resultado de dividir n1 entre n2
Ejem: MOD(11,4) → 3 MOD(2,5) → 2 (2 entre 5=0 y de resto 2)
POWER(valor,exponen Eleva el valor al exponente indicado
te) ó POW(valor, Ejem: SELECT POWER(7, 2); → 49
exponente)
SQRT(n) Calcula la raíz cuadrada de n (n no puede ser negativo)
Ejem: SQRT(9) → 3, SQRT(14) → 3.74…
SIGN(n) Devuelve 1 si n es positivo, cero si vale cero y -1 si es negativo
ABS(n) Calcula el valor absoluto de n
Ejem: ABS(2) → 2 ABS(-2) → 2
EXP(n) Calcula e aumentado al número n, donde e=2.7182818
LN(n) Logaritmo natural de n
LOG10(n) Logaritmo en base 10 de n
SIN(n) COS(n) TAN(n) Trigonométricas
ACOS(n) ASIN(n) Para
ATAN(n) aplicaciones
DEGREES(n) Convierte de radianes a grados matemáticas
3
TRAILING} [remstr] asume BOTH. remstr es opcional y, si no se especifica, se eliminan los
FROM] str), espacios.
TRIM([remstr Ejem: SELECT TRIM(‘ jesus ‘); → jesus
FROM] str) SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); → barxxx
SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); → bar
SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); → barx
4
SELECT LENGTH(emp_no) FROM emple; → Devuelve 4 (longitud del
campo emp_no)
CHAR_LENGTH(tex Devuelve la longitud de la cadena texto, medida en caracteres, ocupen estos
to) uno o múltiples bytes. Si texto no es una cadena, el parámetro se convierte
a cadena automáticamente.
INSTR(str, substr) Devuelve la posición de la primera ocurrencia de substr dentro de str.
Realiza la búsqueda sin tener en cuenta las mayúsculas. Si no la encuentra,
devuelve 0.
5
RPAD(‘LUCIA’, 9) → ‘LUCIA ’
SELECT LPAD(numpag, 6, '---') FROM libro; → ---240, ---327
Función Descripción
NVL(valor,sustituto) Si el valor es NULL, devuelve el valor sustituto; de otro modo,
devuelve valor
Ejem: SELECT apellido, salario+NVL(comision,0) FROM emple;
NVL2(valor,sustituto1, Variante de la anterior, devuelve el valor sustituto1 si valor no es nulo.
sustituto2) Si valor es nulo devuelve el sustituto2
Ejem: SELECT apellido, salario+NVL2(comision,10000,0) FROM
emple;
COALESCE(listaExpresion Permite comprobar varios valores NULL de columnas en una misma
es) función evitando así funciones IF-THEN. Comprueba cada columna y
devuelve la primera de las expresiones que no es nula. Si todas las
columnas fueran NULL, la función tomará el valor por defecto que se
le pasa como último parámetro. Ejemplo:
CREATE TABLE test ( col1 VARCHAR(1), col2 VARCHAR(1), col3
VARCHAR(1));
INSERT INTO test VALUES (NULL, 'B', 'C');
INSERT INTO test VALUES ('A', NULL, 'C');
INSERT INTO test VALUES (NULL, NULL, 'C');
INSERT INTO test VALUES ('A', 'B', 'C');
SELECT COALESCE(col1, col2, col3) FROM test;
El resultado es: B A C A
NULLIF(valor1,valor2) Devuelve nulo si valor1 es igual a valor2. De otro modo devuelve
valor1
Ejem: SELECT apellido, NULLIF(salario, comision) FROM emple;
6
IFNULL(expr1, expr2) Si expr1 no es nulo, IFNULL() devuelve expr1; si no, devuelve expr2.
Ejem: SELECT apellido, salario, comision, IFNULL(comision, 0)
FROM emple;
Para configurar la variable global a nuestro idioma hay que hacer lo siguiente:
SET lc_time_names = ‘es_ES’;
Una vez hecho esto, se puede consultar su valor indicando:
SELECT @@lc_time_names;
Función Descripción
SYSDATE([precisión]) Obtiene la fecha y hora actuales del servidor en el que está
instalada la base de datos. Precisión determina la precisión en
microsegundos.
SELECT SYSDATE(4);
7
SELECT SYSDATE(), SLEEP(2), SYSDATE();
8
Cuando se utiliza la sintaxis con days, este argumento referencia el
número de días a ser añadido a expr.
Ejem: SELECT ADDDATE('2021-01-02', 31); → 2021-02-02
ADDTIME(expr1, expr2) Añade expr2 a expr1 y devuelve el resultado. Expr1 es una
expresión en formato hora o fecha/hora y expr2 es una expresión
en formato hora.
9
Ejem: SELECT DATE_FORMAT('2021-02-16 22:23:00', '%W %M
%Y'); → martes febrero 2021
SELECT DATE_FORMAT('2021-02-16 22:23:00', '%d %y %a %m
%b %j'); → 16 21 mar 02 feb 047
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %r %T %S
%w'); → 22 10:23:00 PM 22:23:00 00 6
STR_TO_DATE(str, format) Es la inversa de la función DATE_FORMAT(). Toma una cadena
str y un formato de cadena format y devuelve un valor DATETIME
si el formato de cadena contiene partes de fecha y hora, o un TIME
si contiene solo horas, o un DATE si contiene solo fechas. Se
utilizan modificadores iguales que el caso anterior.
10
6. Funciones de conversión
CONVERT y CAST
Sintaxis:
• CONVERT (expr, type)
• CAST (expr AS type)
CONVERT con USING se utiliza para convertir datos entre diferentes conjuntos de
caracteres (se puede consultar más información sobre conjuntos de caracteres en
https://mariadb.com/kb/en/character-set-and-collation-overview). Por ejemplo, la
instrucción SELECT CONVERT('abc' USING utf8); convierte la cadena ‘abc’ del
conjunto de caracteres por defecto al conjunto de caracteres utf8.
Ejem:
SET @x = BINARY 'AardVark';
SELECT LOWER(@x), LOWER(CONVERT (@x USING latin1));
--Se convierte un dato binario a cadena para poder pasarlo a minúsculas
Ejem:
SELECT CAST(2.345 AS DECIMAL(7,6)); → 2.345000
Para convertir una cadena a un valor numérico, normalmente no hay que hacer
nada; sencillamente se usa el valor de la cadena como si se tratase de un número.
Ejem: SELECT 1+'1'; → 2
OPERADOR CASE
Sintaxis:
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN
result ...] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...]
11
[ELSE result] END
Ejem:
SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END; →
one
SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; → true
FUNCIÓN IF
Si expr1 es verdadero (expr1 <> 0 y expr1 <> NULL) entonces la función devuelve
expr2; si no, devuelve expr3. La función devuelve un valor numérico o cadena,
dependiendo del contexto en el que se use.
8. Funciones de listas
Las funciones de listas trabajan sobre un grupo de columnas dentro de una misma
fila. Comparan los valores de varias columnas de la misma fila, para obtener el
mayor o el menor. Su formato es:
Ejem: Salario, comisión y valores mayor y menor de los cuatro de los empleados
que no tienen la comisión nula:
SELECT salario, comision, GREATEST(salario, comision), LEAST(salario,
comision) FROM emple WHERE comision IS NOT NULL;
12
9. Funciones de agrupación o de totales
Hasta ahora se han visto funciones que trabajan con valores simples, pero hay
otras funciones estadísticas que actúan sobre un grupo de filas para obtener un
valor, como, por ejemplo, el salario medio, el número de departamentos que hay
en una ciudad, el empleado más antiguo, etc. Los valores nulos son ignorados y se
realizan los cálculos sin contar con ellos.
Son muy interesantes en conjunción con agrupaciones (GROUP BY, que se verá
en el siguiente tema) pues en estos casos ofrece muchas más posibilidades.
Función Significado
COUNT(expresión) Cuenta las filas no nulas de la expresión. Se utiliza el
COUNT (DISTINCT expr, [expre…]) asterisco para contar las filas.
Puede anteponerse a la expresión DISTINCT, para que no
cuente valores repetidos. Por defecto, cuanta los repetidos.
Reconocimiento
La base de estos apuntes ha sido desarrollada por la profesora Lidia Aisa Melgosa.
Adaptados al SGBD MariaDB por José Luis De Cáceres García, con aportaciones
(texto e imágenes) del profesor José Juan Sánchez, cuya obra tiene los permisos
.
13