MySQL函数
MySQL 提供了丰富的内置函数,用于数据处理、转换、计算和聚合。这些函数可以极大地简化 SQL 查询并提高数据处理效率。
1、字符串函数
| 函数 | 功能 |
|---|---|
| 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 个长度的字符串 |
示例
-- concat : 字符串拼接
select concat('Hello' , ' MySQL');
-- lower : 全部转小写
select lower('Hello');
-- upper : 全部转大写
select upper('Hello');
-- lpad : 左填充
select lpad('01', 5, '-');
-- rpad : 右填充
select rpad('01', 5, '-');
-- trim : 去除空格
select trim(' Hello MySQL ');
-- substring : 截取子字符串
select substring('Hello MySQL',1,5);
-- 企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。
update emp set workno = lpad(workno, 5, '0');
2、数值函数
| 函数 | 功能 |
|---|---|
| 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);
-- 通过数据库的函数,生成一个六位数的随机验证码。
select lpad(round(rand()*1000000 , 0), 6, '0')
3、日期函数
| 函数 | 功能 |
|---|---|
| CURDATE () | 返回当前日期 |
| CURTIME () | 返回当前时间 |
| NOW() | 返回当前日期和时间 |
| YEAR (date) | 获取指定 date 的年份 |
| MONTH(date) | 获取指定 date 的月份 |
| DAY (date) | 获取指定 date 的日期 |
| DATE_ADD(date, INTERVAL expr type) | 返回一个日期/时间值加上一个时间段expr 后的时间值 |
| DATEDIFF(datedate2) | 返回起始时间datel 和 结束时间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');
-- 查询所有员工的入职天数,并根据入职天数倒序排序。
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by
entrydays desc;
4、流程函数
| 函数 | 功能 |
|---|---|
| IF(value , t , f) | 如果value为true,则返回t,否则返回 f |
| IFNULL(value1,value2) | 如果valuel不为空, 返回valuell, 否则 返回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(1 > 0, 'True', 'False'); -- 结果: 'True'
-- 实际应用
SELECT name, salary, IF(salary > 5000, 'High', 'Low') AS salary_level
FROM employees;
-- 简单CASE
SELECT
name,
CASE department_id
WHEN 1 THEN 'Sales'
WHEN 2 THEN 'Marketing'
WHEN 3 THEN 'IT'
ELSE 'Other'
END AS department_name
FROM employees;
-- 搜索CASE
SELECT
name,
salary,
CASE
WHEN salary > 10000 THEN 'High'
WHEN salary > 5000 THEN 'Medium'
ELSE 'Low'
END AS salary_grade
FROM employees;
浙公网安备 33010602011771号