函数是指一段可以调用的的程序或代码
函数
字符串函数
数值函数
日期函数
流程函数
字符串函数
函数 |
功能 |
CONCAT(s1, s2, …, sn) |
字符串拼接,将s1, s2, …, sn拼接成一个字符串 |
LOWER(str) |
将字符串全部转为小写 |
UPPER(str) |
将字符串全部转为大写 |
LPAD(str, n, pad) |
左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 |
RPAD(str, n, pad) |
右填充,用字符串pad对str的右边进行填充,达到n个字符串长度 |
TRIM(str) |
去掉字符串头部和尾部的空格 |
SUBSTRING(str, start, len) |
返回从字符串str从start位置起的len个长度的字符串 |
REPLACE(column, source, replace) |
替换字符串 |
例:
mysql> select concat ('hellow','mysql');
+---------------------------+
| concat ('hellow','mysql') |
+---------------------------+
| hellowmysql |
+---------------------------+
1 row in set (0.02 sec)
mysql> select lower ('Hellow');
+------------------+
| lower ('Hellow') |
+------------------+
| hellow |
+------------------+
1 row in set (0.04 sec)
mysql> select upper('Hellow');
+-----------------+
| upper('Hellow') |
+-----------------+
| HELLOW |
+-----------------+
1 row in set (0.03 sec)
mysql> select lpad('01',5,'-');
+------------------+
| lpad('01',5,'-') |
+------------------+
| ---01 |
+------------------+
1 row in set (0.01 sec)
mysql> select rpad('01',5,'-');
+------------------+
| rpad('01',5,'-') |
+------------------+
| 01--- |
+------------------+
1 row in set (0.03 sec)
mysql> select trim(' Hellow MySQL ');
+------------------------+
| trim(' Hellow MySQL ') |
+------------------------+
| Hellow MySQL |
+------------------------+
1 row in set (0.03 sec)
mysql> select substring('Hellow MySQL',1,5);
+-------------------------------+
| substring('Hellow MySQL',1,5) |
+-------------------------------+
| Hello |
+-------------------------------+
1 row in set (0.04 sec)
练习:由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如:1号员工的工号应该为00001。
update class set id=lpad(id,5,'0');
数字函数
函数 |
功能 |
CEIL(x) |
向上取整 |
FLOOR(x) |
向下取整 |
MOD(x, y) |
返回x/y的模 |
RAND() |
返回0~1内的随机数 |
ROUND(x, y) |
求参数x的四舍五入值,保留y位小数 |
mysql> select ceil(1.1);
+-----------+
| ceil(1.1) |
+-----------+
| 2 |
+-----------+
1 row in set (0.05 sec)
mysql> select floor(1.1);
+------------+
| floor(1.1) |
+------------+
| 1 |
+------------+
1 row in set (0.02 sec)
mysql> select mod(3,4);
+----------+
| mod(3,4) |
+----------+
| 3 |
+----------+
1 row in set (0.05 sec)
mysql> select rand();
+---------------------+
| rand() |
+---------------------+
| 0.03044703978155464 |
+---------------------+
1 row in set (0.02 sec)
mysql> select round(2.34,2);
+---------------+
| round(2.34,2) |
+---------------+
| 2.34 |
+---------------+
1 row in set (0.06 sec)
练习:通过数据库的函数生成一个六位的随机验证码
mysql> select lpad(round(rand()*1000000,0),6,'0');
+-------------------------------------+
| lpad(round(rand()*1000000,0),6,'0') |
+-------------------------------------+
| 089983 |
+-------------------------------------+
1 row in set (0.04 sec)
日期函数
函数 |
功能 |
CURDATE() |
返回当前日期 |
CURTIME() |
返回当前时间 |
NOW() |
返回当前日期和时间 |
YEAR(date) |
获取指定date的年份 |
MONTH(date) |
获取指定date的月份 |
DAY(date) |
获取指定date的日期 |
DATE_ADD(date, INTERVAL expr type) |
返回一个日期/时间值加上一个时间间隔expr后的时间值 |
DATEDIFF(date1, date2) |
返回起始时间date1和结束时间date2之间的天数 |
流程函数
函数 |
功能 |
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默认值 |
mysql> select if(false,'OK','Error');
+------------------------+
| if(false,'OK','Error') |
+------------------------+
| Error |
+------------------------+
1 row in set (0.04 sec)
mysql> select ifnull('OK','Default');
+------------------------+
| ifnull('OK','Default') |
+------------------------+
| OK |
+------------------------+
1 row in set (0.04 sec)
mysql> select ifnull('','Default');
+----------------------+
| ifnull('','Default') |
+----------------------+
| |
+----------------------+
1 row in set (0.03 sec)
mysql> select ifnull(null,'Default');
+------------------------+
| ifnull(null,'Default') |
+------------------------+
| Default |
+------------------------+
1 row in set (0.02 sec)
select
name,
(case when age > 30 then '中年' else '青年' end)
from employee;
select
name,
(case workaddress when '北京市' then '一线城市' when '上海市' then '一线城市' else '二线城市' end) as '工作地址'
from employee;