函数是指一段可以直接被另一段程序调用的程序或代码。MySQL已经提供了一些函数。
MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。
字符串函数
常用函数:
-
concat(S1,S2,...Sn)
:字符串拼接,将S1,S2,… Sn拼接成一个字符串。 -
lower(str)
:将字符串str全部转为小写。 -
upper(str)
:将字符串str全部转为大写。 -
lpad(str, n, pad)
:左填充,用字符串pad对str的左边进行填充,达到n个字符串长度。 -
rpad(str, n, pad)
:右填充,用字符串pad对str的右边进行填充,达到n个字符串长度。 -
trim(str)
:去掉字符串头部和尾部的空格。 -
substring(str, start, len)
:返回从字符串str从start位置起的len个长度的字符串,索引值从1开始。
-- concat(S1,S2,...Sn):字符串拼接,将S1,S2,... Sn拼接成一个字符串
select concat('hello', 'mysql');
-- lower(str):将字符串str全部转为小写
select lower('HELLO');
-- upper(str):将字符串str全部转为大写
select upper('hello');
-- lpad(str, n, pad):左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
select lpad('hello', 20, ',');
-- rpad(str, n, pad):右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
select rpad('mysql', 10, '-');
-- trim(str):去掉字符串头部和尾部的空格
select trim(' hello mysql ');
-- substring(str, start, len):返回从字符串str从start位置起的len个长度的字符串
select substring('hello mysql', 1, 5);
数值函数
常用函数:
-
ceil(x)
:向上取整。 -
floor(x)
:向下取整。 -
mod(x,y)
:返回x/y的模。 -
rand()
:返回0~1内的随机数。 -
round(x,y)
:求参数x的四舍五入的值,保留y位小数。
-- ceil:向上取整
select ceil(1.1);
-- floor:向下取整
select floor(1.9);
-- mod:取模
select mod(7,4);
-- rand:获取随机数
select rand();
-- round:四舍五入
select round(2.344,2);
日期函数
常用函数:
-
curdate()
:返回当前日期。 -
curtime()
:返回当前时间。 -
now()
:返回当前日期和时间。 -
year(date)
:获取指定date的年份。 -
month(date)
:获取指定date的月份。 -
day(date)
:获取指定date的日期。 -
date_add(date, INTERVAL expr type)
:返回一个日期/时间值加上一个时间间隔expr后的时间值。type可选年月日。 -
datediff(date1,date2)
:返回起始时间date1和结束时间date2之间的天数。
-- curdate:当前日期
select curdate();
-- curtime:当前时间
select curtime();
-- now:当前日期和时间
select now();
-- YEAR , MONTH , DAY:当前年、月、日
select YEAR(now());
select MONTH(now());
select DAY(now());
-- date_add:增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );
-- datediff:获取两个日期相差的天数
select datediff('2021-10-01', '2021-12-01');
流程函数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
常用函数:
-
if(value , t , f)
:如果value为true,则返回t,否则返回f。 -
ifnull(value1 , value2)
:如果value1不为空,返回value1,否则返回value2。 -
case when [ val1 ] then [res1] ... else [ default ] end
:如果val1为true,返回res1,… 否则返回default默认值。 -
case [ expr ] when [ val1 ] then [res1] ... else [ default ] end
:如果expr的值等于val1,返回res1,… 否则返回default默认值。
-- if
select if(false, 'Ok', 'Error');
-- ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
-- case when then else end
-- 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)
select
name,
(
case workaddress
when '北京' then '一线城市'
when '上海' then '一线城市'
else '二线城市' end
) as '工作地址'
from emp;