MySQL 常用函数全解析字符串、数值、日期、流程控制函数实战指南前言在日常的数据库操作中MySQL 提供了丰富的内置函数极大提升了数据处理效率和灵活性。本文基于学习过程中的实践系统整理了字符串函数、数值函数、日期函数、流程控制函数四大类常用函数并结合真实应用场景进行演示帮助你快速掌握核心知识轻松应对开发与面试一、字符串函数String Functions1. 常用函数功能一览函数功能说明CONCAT(str1, str2, ...)拼接多个字符串LOWER(str)/LCASE(str)转为小写UPPER(str)/UCASE(str)转为大写LPAD(str, n, pad)左填充不足长度用指定字符串补满RPAD(str, n, pad)右填充TRIM(str)去除字符串首尾空格SUBSTRING(str, start, length)截取子字符串从1开始计数2. 实战案例演示演示1字符串拼接与大小写转换-- 拼接字符串SELECTCONCAT(Hello ,World!, 欢迎学习 MySQL);-- 转换大小写SELECTLOWER(HELLO WORLD),UPPER(hello world);演示2左填充员工编号补零-- 假设员工号 E001 → 00001确保长度为6位UPDATEempSETemp_numberLPAD(emp_number,6,0);-- 查询结果SELECTemp_id,emp_number,emp_nameFROMemp;演示3去除空格 截取字段-- 去除首尾空格SELECTTRIM( hello )ASresult;-- 截取前两个字符SELECTSUBSTRING(Hello World,1,2)ASresult;-- 返回He二、数值函数Numeric Functions1. 常用函数功能一览函数功能说明CEIL(x)/CEILING(x)向上取整FLOOR(x)向下取整MOD(x, y)返回 x 除以 y 的余数注意MOD(3,4)不是3/4RAND()生成 0~1 之间的随机浮点数ROUND(x, d)四舍五入保留 d 位小数⚠️ 注意MOD(3,4)返回的是3不是0.75错误写法MOD(3/4)应改为MOD(3, 4)2. 实战案例演示演示1取整与取模SELECTCEIL(3.14)ASceil_val,FLOOR(3.14)ASfloor_val,MOD(10,3)ASmod_val;-- 返回 1演示2生成六位数随机验证码-- 使用 RAND() ROUND 生成 0~999999 的随机数SELECTROUND(RAND()*999999)ASverification_code;-- 示例输出238456三、日期函数Date Functions1. 常用函数功能一览函数功能说明CURDATE()返回当前日期YYYY-MM-DDCURTIME()返回当前时间HH:MM:SSNOW()返回当前日期时间YYYY-MM-DD HH:MM:SSYEAR(date)提取年份MONTH(date)提取月份DAY(date)提取日DATE_ADD(date, INTERVAL n unit)增加时间间隔DATE_SUB(date, INTERVAL n unit)减少时间间隔DATEDIFF(date1, date2)计算两个日期之间的天数差MONTHNAME(date)返回月份英文名如 JanuaryDAYNAME(date)返回星期英文名WEEKDAY(date)返回星期几0周日6周六2. 实战案例演示演示1获取当前时间信息SELECTCURDATE()AStoday,CURTIME()ASnow_time,NOW()ASfull_time;演示2计算员工在职天数倒序排序SELECTemp_id,emp_name,DATEDIFF(NOW(),hire_date)ASdays_workedFROMempORDERBYdays_workedDESC;演示3时间运算-- 1天后SELECTDATE_ADD(NOW(),INTERVAL1DAY);-- 1天前SELECTDATE_SUB(NOW(),INTERVAL1DAY);-- 3个月后SELECTDATE_ADD(NOW(),INTERVAL3MONTH);四、流程控制函数Control Flow Functions1. 常用函数功能一览函数功能说明IF(condition, expr1, expr2)条件判断满足则返回 expr1否则返回 expr2IFNULL(expr1, expr2)如果 expr1 为 NULL返回 expr2否则返回 expr1CASE WHEN ... THEN ... [ELSE ...] END多条件分支判断支持复杂逻辑2. 实战案例演示演示1员工薪资等级划分SELECTemp_id,emp_name,salary,IF(salary10000,高薪,普通)ASsalary_levelFROMemp;演示2处理空部门信息SELECTemp_id,emp_name,IFNULL(dept_name,未分配部门)ASdept_nameFROMemp;演示3复杂等级划分CASE 语句SELECTemp_id,emp_name,salary,CASEWHENsalary20000THEN顶级WHENsalary15000THEN高级WHENsalary8000THEN中级ELSE初级ENDASlevelFROMemp;演示4学生考试成绩等级评定模拟假设有student表包含语文、数学、英语三科成绩SELECTs_name,-- 语文等级CASEWHENchinese80THEN优秀WHENchinese60THEN及格ELSE不及格ENDASchinese_grade,-- 数学等级CASEWHENmath80THEN优秀WHENmath60THEN及格ELSE不及格ENDASmath_grade,-- 英语等级CASEWHENenglish80THEN优秀WHENenglish60THEN及格ELSE不及格ENDASenglish_gradeFROMstudent;总结函数选择建议类型推荐使用场景字符串函数数据清洗、字段拼接、格式化输出数值函数计算统计、生成随机码、四舍五入处理日期函数计算服务年限、判断节假日、周期分析流程控制函数多条件分类、空值处理、逻辑判断作者别抢我的锅包肉原创不易转载请注明出处-- 使用数据库USEmysql_learn;-- 创建员工表CREATETABLEemp(emp_idINTNOTNULLPRIMARYKEY,emp_numberVARCHAR(50)NULL,emp_nameVARCHAR(50)NULL,dept_nameVARCHAR(50)NULL,jobVARCHAR(50)NULL,salaryDECIMAL(10,2)NULL,hire_dateDATENULL);-- 插入数据INSERTINTOemp(emp_id,emp_number,emp_name,dept_name,job,salary,hire_date)VALUES(1,E001,张伟,技术部,开发工程师,15000.00,2023-01-15),(2,E002,李娜,人事部,HR专员,8000.00,2022-03-20),(3,E003,王强,销售部,销售经理,12000.00,2021-07-10),(4,E004,赵敏,财务部,会计,9500.00,2020-11-05),(5,E005,刘洋,技术部,高级工程师,20000.00,2019-09-01);-- 左填充员工编号UPDATEempSETemp_numberLPAD(emp_number,6,0);附加资源推荐MySQL 官方文档 - Functions and Operators推荐工具MySQL Workbench / DBeaver / Navicat
【 MySQL】第二节-常用函数全解析:字符串、数值、日期、流程控制函数实战指南
发布时间:2026/6/4 1:05:57
MySQL 常用函数全解析字符串、数值、日期、流程控制函数实战指南前言在日常的数据库操作中MySQL 提供了丰富的内置函数极大提升了数据处理效率和灵活性。本文基于学习过程中的实践系统整理了字符串函数、数值函数、日期函数、流程控制函数四大类常用函数并结合真实应用场景进行演示帮助你快速掌握核心知识轻松应对开发与面试一、字符串函数String Functions1. 常用函数功能一览函数功能说明CONCAT(str1, str2, ...)拼接多个字符串LOWER(str)/LCASE(str)转为小写UPPER(str)/UCASE(str)转为大写LPAD(str, n, pad)左填充不足长度用指定字符串补满RPAD(str, n, pad)右填充TRIM(str)去除字符串首尾空格SUBSTRING(str, start, length)截取子字符串从1开始计数2. 实战案例演示演示1字符串拼接与大小写转换-- 拼接字符串SELECTCONCAT(Hello ,World!, 欢迎学习 MySQL);-- 转换大小写SELECTLOWER(HELLO WORLD),UPPER(hello world);演示2左填充员工编号补零-- 假设员工号 E001 → 00001确保长度为6位UPDATEempSETemp_numberLPAD(emp_number,6,0);-- 查询结果SELECTemp_id,emp_number,emp_nameFROMemp;演示3去除空格 截取字段-- 去除首尾空格SELECTTRIM( hello )ASresult;-- 截取前两个字符SELECTSUBSTRING(Hello World,1,2)ASresult;-- 返回He二、数值函数Numeric Functions1. 常用函数功能一览函数功能说明CEIL(x)/CEILING(x)向上取整FLOOR(x)向下取整MOD(x, y)返回 x 除以 y 的余数注意MOD(3,4)不是3/4RAND()生成 0~1 之间的随机浮点数ROUND(x, d)四舍五入保留 d 位小数⚠️ 注意MOD(3,4)返回的是3不是0.75错误写法MOD(3/4)应改为MOD(3, 4)2. 实战案例演示演示1取整与取模SELECTCEIL(3.14)ASceil_val,FLOOR(3.14)ASfloor_val,MOD(10,3)ASmod_val;-- 返回 1演示2生成六位数随机验证码-- 使用 RAND() ROUND 生成 0~999999 的随机数SELECTROUND(RAND()*999999)ASverification_code;-- 示例输出238456三、日期函数Date Functions1. 常用函数功能一览函数功能说明CURDATE()返回当前日期YYYY-MM-DDCURTIME()返回当前时间HH:MM:SSNOW()返回当前日期时间YYYY-MM-DD HH:MM:SSYEAR(date)提取年份MONTH(date)提取月份DAY(date)提取日DATE_ADD(date, INTERVAL n unit)增加时间间隔DATE_SUB(date, INTERVAL n unit)减少时间间隔DATEDIFF(date1, date2)计算两个日期之间的天数差MONTHNAME(date)返回月份英文名如 JanuaryDAYNAME(date)返回星期英文名WEEKDAY(date)返回星期几0周日6周六2. 实战案例演示演示1获取当前时间信息SELECTCURDATE()AStoday,CURTIME()ASnow_time,NOW()ASfull_time;演示2计算员工在职天数倒序排序SELECTemp_id,emp_name,DATEDIFF(NOW(),hire_date)ASdays_workedFROMempORDERBYdays_workedDESC;演示3时间运算-- 1天后SELECTDATE_ADD(NOW(),INTERVAL1DAY);-- 1天前SELECTDATE_SUB(NOW(),INTERVAL1DAY);-- 3个月后SELECTDATE_ADD(NOW(),INTERVAL3MONTH);四、流程控制函数Control Flow Functions1. 常用函数功能一览函数功能说明IF(condition, expr1, expr2)条件判断满足则返回 expr1否则返回 expr2IFNULL(expr1, expr2)如果 expr1 为 NULL返回 expr2否则返回 expr1CASE WHEN ... THEN ... [ELSE ...] END多条件分支判断支持复杂逻辑2. 实战案例演示演示1员工薪资等级划分SELECTemp_id,emp_name,salary,IF(salary10000,高薪,普通)ASsalary_levelFROMemp;演示2处理空部门信息SELECTemp_id,emp_name,IFNULL(dept_name,未分配部门)ASdept_nameFROMemp;演示3复杂等级划分CASE 语句SELECTemp_id,emp_name,salary,CASEWHENsalary20000THEN顶级WHENsalary15000THEN高级WHENsalary8000THEN中级ELSE初级ENDASlevelFROMemp;演示4学生考试成绩等级评定模拟假设有student表包含语文、数学、英语三科成绩SELECTs_name,-- 语文等级CASEWHENchinese80THEN优秀WHENchinese60THEN及格ELSE不及格ENDASchinese_grade,-- 数学等级CASEWHENmath80THEN优秀WHENmath60THEN及格ELSE不及格ENDASmath_grade,-- 英语等级CASEWHENenglish80THEN优秀WHENenglish60THEN及格ELSE不及格ENDASenglish_gradeFROMstudent;总结函数选择建议类型推荐使用场景字符串函数数据清洗、字段拼接、格式化输出数值函数计算统计、生成随机码、四舍五入处理日期函数计算服务年限、判断节假日、周期分析流程控制函数多条件分类、空值处理、逻辑判断作者别抢我的锅包肉原创不易转载请注明出处-- 使用数据库USEmysql_learn;-- 创建员工表CREATETABLEemp(emp_idINTNOTNULLPRIMARYKEY,emp_numberVARCHAR(50)NULL,emp_nameVARCHAR(50)NULL,dept_nameVARCHAR(50)NULL,jobVARCHAR(50)NULL,salaryDECIMAL(10,2)NULL,hire_dateDATENULL);-- 插入数据INSERTINTOemp(emp_id,emp_number,emp_name,dept_name,job,salary,hire_date)VALUES(1,E001,张伟,技术部,开发工程师,15000.00,2023-01-15),(2,E002,李娜,人事部,HR专员,8000.00,2022-03-20),(3,E003,王强,销售部,销售经理,12000.00,2021-07-10),(4,E004,赵敏,财务部,会计,9500.00,2020-11-05),(5,E005,刘洋,技术部,高级工程师,20000.00,2019-09-01);-- 左填充员工编号UPDATEempSETemp_numberLPAD(emp_number,6,0);附加资源推荐MySQL 官方文档 - Functions and Operators推荐工具MySQL Workbench / DBeaver / Navicat