Ejemplos funciones MySql

Todas las funciones:

Referencia de funciones de MySql

Funciones de control de flujo:

CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

Evalua una condición y dependiendo del resultado nos devuelve un valor u otro.

IF(expr1,valor_si_cierto,valor_si_falso)

Si expresión 1 es cierto devuelve valor_si_cierto y si no devuelve valor_si_falsi

IFNULL(expr1,expr2)

Si la expresión 1 es nulo devuelve expresión 2

select rating,
case rating when 'G' then 'Para todos los públicos'
when 'PG' then 'Menores acompañados'
when 'R' then 'Para adultos'
else 'Otros'
end tipo -- Alias para que no salga un churro
from film

select length,
case when length<70 then 'Cortita'
when length<130 then 'Normal'
else 'Tostón'
end duracion
from film

SELECT *, 
case when amount<4 then 'bajo' when amount <7 then 'medio' else 'alto' end as tipo ,
if (amount<6,'barato','caro') precio,
if (amount between 4 and 6,'medio','') precio2,
if(amount<4,'bajo',if(amount<7,'medio','alto')) tipo2
FROM sakila.payment;

select 
case dayofweek(payment_date)
 when 1 then 'Domingo'
 when 2 then 'Lunes' 
 when 3 then 'Martes' 
 when 4 then 'Miércoles' 
 when 5 then 'Jueves' 
 when 6 then 'Viernes' 
 when 7 then 'Sábado' 
 end dias,count(payment_id) cuenta,
sum(amount) total,avg(amount) media
from payment
group by dias;

select *,
case staff_id when 1 then 'Ana' when 2 then 'Juan' end as empleado
FROM sakila.payment;

select title, if(replacement_cost>20,concat('Descuento: ',replacement_cost*.9) ,replacement_cost) coste from film;

select ifnull(8,0), ifnull(null,0),0+null,concat('Ana',null)

Funciones matemáticas:

ROUND(X)ROUND(X,D)

Redondea un número a las posiciones decimales que queramos

select round(4.9), floor(4.9), 
ceil(4.9),truncate(4.9,0), round(-4.9), 
floor(-4.9), ceil(-4.9),truncate(-4.9,0), sign(4.9),sign(-4.9),abs(-4.9);

Funciones de cadena:

CONCAT(str1,str2,...)

Concatena una o varias cadenas

CONCAT_WS(separator,str1,str2,...)

Lo mismo pero con un separador

LOCATE(substr,str)LOCATE(substr,str,pos)

Devuelve la posición de una cadena dentro de otra

LEFT(str,len)

Devuelve len caracteres de la cadena empezando por la izquierda

LENGTH(str)

Devuelve la longitud de la cadena

LOWER(str) LCASE(str)

Pasa la cadena a minúsculas

REVERSE(str)

Invierte la cadena

RIGHT(str,len)

Devuelve len caracteres de la cadena empezando por la derecha

SUBSTRING(str,pos)SUBSTRING(str FROM pos)SUBSTRING(str,pos,len)SUBSTRING(str FROM pos FOR len)

Para obtener subcadenas de una cadena desde una posición y con la longitud que queramos.

UCASE(str) UPPER().

Pasa la cadena a mayúsculas

select concat(first_name,' ',last_name) cliente,
concat_ws(' - ',first_name, last_name,email) nombre ,
length(first_name) longitud,
left(first_name,2) izq,
right(first_name,2) der,
locate('@',email) pos,
substr(last_name,4,2) subcadena,
substr(email,1,locate('@',email)-1) lmail,
substr(email,locate('@',email)+1) rmail,
reverse(first_name) vuelta,
lower(first_name)  minusculas,
upper(email) mayusculas
from customer

SELECT * FROM sakila.film where length(title)>20; 

select length(first_name), concat(first_name,' ',last_name),
 left(first_name,3), right(last_name,3) nombre, lcase(first_name),
 ucase(last_name) , concat(ucase(left(first_name,1)),lcase(substr(first_name,2))), 
reverse(first_name), replace(first_name,'P','##') 
from actor where first_name=reverse(first_name) 

update actor set first_name=concat(ucase(left(first_name,1)),lcase(substr(first_name,2))), 
last_name=concat(ucase(left(last_name,1)),lcase(substr(last_name,2))) where actor_id>=1

Funciones de fecha:

CURDATE()

Fecha actual

CURTIME([fsp])

Hora actual

NOW([fsp])

Fecha y hora actual.

DATE_FORMAT(date,format)

Formatea una fecha con el formato específicado.

DAYOFMONTH(date) DAYOFWEEK(date)DAYOFYEAR(date)

Devuelven el día del mes, de la semana y del año respectivamente

HOUR(time) MINUTE(time)SECOND(time)MONTH(date)YEAR(date)

Devuelven la hora, el minuto, el segundo, el mes y el año de una fecha

select curtime(),curdate(),now(),
week(curdate()),year(curdate()),month(curdate()),
day(curdate()),hour(curtime()),monthname(now()),
dayname(now()),dayname('1985-03-07'),
dayofyear(now()),last_day(now()),
date_format(now(),'%e-%m-%y %H:%i'),utc_date()

SELECT * FROM sakila.payment
where dayofweek(payment_date)=3;

SELECT * FROM sakila.payment
where date_format(payment_date,'%w')=2;

SELECT * FROM sakila.payment
where day(payment_date)=day(curdate()) ;

Intervalos en Mysql:

https://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-intervals

Funciones de conversión:

CAST(expr AS type)

Convierte una expresión al tipo que le digamos

select '8'>'100',
cast('8' as signed)>cast('100' as signed);

Funciones de encriptación:

select aes_decrypt(aes_encrypt('Hola que tal','123'),'123');

select md5('hola que tal'),
md5('tomateofñlkfñdfñlghfñgsipshdfisu'),
sha1('hola que tal'),
sha2('hola que tal', 256)

Funciones de información:

select database(), current_user(), 
last_insert_id(), row_count(), version();

insert into country(country) values('Utopía');
set @a=last_insert_id();
insert into city(city,country_id) values ('Nowhere',@a);
insert into city(city,country_id) values ('Somewhere',@a);

https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_last-insert-id

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos