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